91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JavaScript怎么實現哈希表

發布時間:2021-06-02 16:54:38 來源:億速云 閱讀:151 作者:Leah 欄目:web開發

本篇文章為大家展示了使用JavaScript怎么實現哈希表,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

屬性的枚舉:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
for (var prop in person) {
  console.log(prop + " ",person[prop]);
}

輸出:

使用JavaScript怎么實現哈希表

即對于對象而言,我們可以使用for in來枚舉對象的屬性。

屬性的刪除:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
var ifRemove = delete person.name;
for (var prop in person) {
  console.log(prop + " ",person[prop]);
}
console.log(ifRemove);

對象的屬性可以通過 delete 來刪除,并且會有一個返回值。 如下:

使用JavaScript怎么實現哈希表

注意: 一般只有對象的屬性才可以刪除,而變量是不能刪除的,如:

var x = 1;
console.log(delete x);

這時打印臺輸出false,因為變量是不可被刪除的。

檢測屬性是否存在:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
console.log("age" in person);
console.log("someOther" in person);

前者返回true,后者返回false。 即我們可以使用in來確定一個對象是否含有該屬性。

屬性的添加:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
person["school"] = "XJTU";
console.log(person);

屬性的添加非常簡單,如上所示,最終打印出來的對象是包含 school 屬性的。

第二部分: 使用js實現哈希表

下面是通過構造函數得到一個哈希表,在使用時只需實例化即可,且下面的功能較為豐富,在實際問題中,我們可以選擇性的使用 。

// 創建構造函數HashTable
function HashTable() {
    // 初始化哈希表的記錄條數size
    var size = 0;
    // 創建對象用于接受鍵值對
    var res = {};
    // 添加關鍵字,無返回值
    this.add = function (key, value) {
      //判斷哈希表中是否存在key,若不存在,則size加1,且賦值
      if (!this.containKey(key)) {
        size++;
      }
      // 如果之前不存在,賦值; 如果之前存在,覆蓋。
      res[key] = value;
    };
    // 刪除關鍵字, 如果哈希表中包含key,并且delete返回true則刪除,并使得size減1
    this.remove = function (key) {
      if (this.containKey(key) && (delete res[key])) {
        size--;
      }
    };
    // 哈希表中是否包含key,返回一個布爾值
    this.containKey = function (key) {
      return (key in res);
    };
    // 哈希表中是否包含value,返回一個布爾值
    this.containValue = function (value) {
      // 遍歷對象中的屬性值,判斷是否和給定value相等
      for (var prop in res) {
        if (res[prop] === value) {
          return true;
        }
      }
      return false;
    };
    // 根據鍵獲取value,如果不存在就返回null
    this.getValue = function (key) {
      return this.containKey(key) ? res[key] : null;
    };
    // 獲取哈希表中的所有value, 返回一個數組
    this.getAllValues = function () {
      var values = [];
      for (var prop in res) {
        values.push(res[prop]);
      }
      return values;
    };
    // 根據值獲取哈希表中的key,如果不存在就返回null
    this.getKey = function (value) {
      for (var prop in res) {
        if (res[prop] === value) {
          return prop;
        }
      }
      // 遍歷結束沒有return,就返回null
      return null;
    };
    // 獲取哈希表中所有的key,返回一個數組
    this.getAllKeys = function () {
      var keys = [];
      for (var prop in res) {
        keys.push(prop);
      }
      return keys;
    };
    // 獲取哈希表中記錄的條數,返回一個數值
    this.getSize = function () {
      return size;
    };
    // 清空哈希表,無返回值
    this.clear = function () {
      size = 0;
      res = {};
    };
}

第三部分: 應用實例

問題:給定一個整型的數組(無序),找出其中的兩個數使得其和為某個指定的值,并返回這兩個數的下標(數組下標從0開始),假設數組元素的值各不相同。

實現如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>哈希表的使用</title>
</head>
<body>
  <script>
  function queryIndex(arr, result) {
    var hashTable = new HashTable();
    var arrLength = arr.length;
    var sub = [];
    for (var i = 0; i < arrLength; i++) {
      // 掃描一遍,存儲下標和值
      hashTable.add(i, arr[i]);
    }
    for (var j = 0; j < arrLength; j++) {
      if (hashTable.containValue(result - arr[j]) && result !== 2*arr[j]) {
        // 獲取兩個下標,跳出循環
        sub.push(j);
        var antherIndex = Number(hashTable.getKey(result - arr[j]));
        sub.push(antherIndex);
        break;
      }
    }
    if (sub.length !== 0) {
      return sub;
    } else {
      return -1;
    }
  }
  console.log(queryIndex([1,5,7,3,8], 15)); // 2, 4
  console.log(queryIndex([8,18,28,12,29,17], 46)); // 2, 4
  console.log(queryIndex([8,18,28,12,29,17], 2)); // -1
   // 創建構造函數HashTable
  function HashTable() {
    // 初始化哈希表的記錄條數size
    var size = 0;
    // 創建對象用于接受鍵值對
    var res = {};
    // 添加關鍵字,無返回值
    this.add = function (key, value) {
      //判斷哈希表中是否存在key,若不存在,則size加1,且賦值
      if (!this.containKey(key)) {
        size++;
      }
      // 如果之前不存在,賦值; 如果之前存在,覆蓋。
      res[key] = value;
    };
    // 刪除關鍵字, 如果哈希表中包含key,并且delete返回true則刪除,并使得size減1
    this.remove = function (key) {
      if (this.containKey(key) && (delete res[key])) {
        size--;
      }
    };
    // 哈希表中是否包含key,返回一個布爾值
    this.containKey = function (key) {
      return (key in res);
    };
    // 哈希表中是否包含value,返回一個布爾值
    this.containValue = function (value) {
      // 遍歷對象中的屬性值,判斷是否和給定value相等
      for (var prop in res) {
        if (res[prop] === value) {
          return true;
        }
      }
      return false;
    };
    // 根據鍵獲取value,如果不存在就返回null
    this.getValue = function (key) {
      return this.containKey(key) ? res[key] : null;
    };
    // 獲取哈希表中的所有value, 返回一個數組
    this.getAllValues = function () {
      var values = [];
      for (var prop in res) {
        values.push(res[prop]);
      }
      return values;
    };
    // 根據值獲取哈希表中的key,如果不存在就返回null
    this.getKey = function (value) {
      for (var prop in res) {
        if (res[prop] === value) {
          return prop;
        }
      }
      // 遍歷結束沒有return,就返回null
      return null;
    };
    // 獲取哈希表中所有的key,返回一個數組
    this.getAllKeys = function () {
      var keys = [];
      for (var prop in res) {
        keys.push(prop);
      }
      return keys;
    };
    // 獲取哈希表中記錄的條數,返回一個數值
    this.getSize = function () {
      return size;
    };
    // 清空哈希表,無返回值
    this.clear = function () {
      size = 0;
      res = {};
    };
  }
  </script>
</body>
</html>

上述內容就是使用JavaScript怎么實現哈希表,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东平县| 新宁县| 鲁山县| 彩票| 孙吴县| 靖安县| 枣阳市| 红安县| 宣城市| 贵德县| 滕州市| 山阴县| 莱西市| 且末县| 杨浦区| 象州县| 乌鲁木齐市| 阿巴嘎旗| 南汇区| 瑞安市| 宜春市| 重庆市| 墨竹工卡县| 分宜县| 正蓝旗| 中超| 顺平县| 通渭县| 宝兴县| 曲阜市| 邵阳市| 镶黄旗| 陆丰市| 长葛市| 乌兰察布市| 读书| 绥德县| 额尔古纳市| 白河县| 建昌县| 无棣县|