JavaScript Map

x33g5p2x  于2022-05-05 转载在 Java  
字(4.2k)|赞(0)|评价(0)|浏览(431)

在本教程中,您将借助示例了解 JavaScript Map 和 WeakMap。
    JavaScript ES6 引入了两种新的数据结构,即 Map 和 WeakMap。
    Map 类似于 JavaScript 中的对象,它允许我们将元素存储在键/值对中。
    Map 中的元素按插入顺序插入。但是,与对象不同的是,map 可以包含对象、函数和其他数据类型作为键。

创建 JavaScript Map

要创建 Map,我们使用 new Map() 构造函数。例如,

  1. // create a Map
  2. const map1 = new Map(); // an empty map
  3. console.log(map1); // Map {}
将条目插入 Map

创建 map 后,您可以使用 set() 方法向其中插入元素。例如,

  1. // create a set
  2. let map1 = new Map();
  3. // insert key-value pair
  4. map1.set('info', {name: 'Jack', age: 26});
  5. console.log(map1); // Map {"info" => {name: "Jack", age: 26}}

也可以将对象或函数用作键。例如,

  1. // Map with object key
  2. let map2 = new Map();
  3. let obj = {};
  4. map2.set(obj, {name: 'Jack', age: "26"});
  5. console.log(map2); // Map {{} => {name: "Jack", age: "26"}}
访问 Map 元素

您可以使用 get() 方法访问Map元素。例如,

  1. let map1 = new Map();
  2. map1.set('info', {name: 'Jack', age: "26"});
  3. // access the elements of a Map
  4. console.log(map1.get('info')); // {name: "Jack", age: "26"}
检查 Map 元素

您可以使用 has() 方法检查元素是否在 Map 中。例如,

  1. const set1 = new Set([1, 2, 3]);
  2. let map1 = new Map();
  3. map1.set('info', {name: 'Jack', age: "26"});
  4. // check if an element is in Set
  5. console.log(map1.has('info')); // true
移除元素

您可以使用 clear() 和 delete() 方法从 Map 中删除元素。
    如果指定的键/值对存在并且已被删除,则 delete() 方法返回 true,否则返回 false。例如,

  1. let map1 = new Map();
  2. map1.set('info', {name: 'Jack', age: "26"});
  3. // removing a particular element
  4. map1.delete('address'); // false
  5. console.log(map1); // Map {"info" => {name: "Jack", age: "26"}}
  6. map1.delete('info'); // true
  7. console.log(map1); // Map {}

clear() 方法从 Map 对象中删除所有键/值对。例如,

  1. let map1 = new Map();
  2. map1.set('info', {name: 'Jack', age: "26"});
  3. // removing all element
  4. map1.clear();
  5. console.log(map1); // Map {}
JavaScript Map 大小

您可以使用 size 属性获取 Map 中的元素数量。例如,

  1. let map1 = new Map();
  2. map1.set('info', {name: 'Jack', age: "26"});
  3. console.log(map1.size); // 1
遍历 Map

您可以使用 for…of 循环或 forEach() 方法遍历 Map 元素。元素按插入顺序访问。例如,

  1. let map1 = new Map();
  2. map1.set('name', 'Jack');
  3. map1.set('age', '27');
  4. // looping through Map
  5. for (let [key, value] of map1) {
  6. console.log(key + '- ' + value);
  7. }

输出

  1. name- Jack
  2. age- 27

您也可以使用 forEach() 方法获得与上述程序相同的结果。例如,

  1. // using forEach method()
  2. let map1 = new Map();
  3. map1.set('name', 'Jack');
  4. map1.set('age', '27');
  5. // looping through Map
  6. map1.forEach(function(value, key) {
  7. console.log(key + '- ' + value)
  8. })
迭代 Map 键

您可以遍历 Map,使用 keys() 方法获取键。例如,

  1. let map1 = new Map();
  2. map1.set('name', 'Jack');
  3. map1.set('age', '27');
  4. // looping through the Map
  5. for (let key of map1.keys()) {
  6. console.log(key)
  7. }

输出

  1. name
  2. age
迭代 Map 值

您可以遍历 Map,使用 values() 方法获取值。例如,

  1. let map1 = new Map();
  2. map1.set('name', 'Jack');
  3. map1.set('age', '27');
  4. // looping through the Map
  5. for (let values of map1.values()) {
  6. console.log(values);
  7. }

输出

  1. Jack
  2. 27
获取 Map 的键/值

您可以遍历 Map,使用 entries() 方法获取 Map 的键/值。例如,

  1. let map1 = new Map();
  2. map1.set('name', 'Jack');
  3. map1.set('age', '27');
  4. // looping through the Map
  5. for (let elem of map1.entries()) {
  6. console.log(`${elem[0]}: ${elem[1]}`);
  7. }

输出

  1. name: Jack
  2. age: 27
JavaScript Map vs 对象
Map对象
Map可以包含对象和其他数据类型作为键。对象只能包含字符串和符号作为键。
Map可以直接迭代,并且可以访问它们的值。可以通过访问其键来迭代对象。
Map的元素个数可以由size属性决定。对象的元素数量需要手动确定。
Map对于需要频繁添加或删除元素的程序表现更好。如果程序需要频繁添加或删除元素,则对象性能不佳。
JavaScript WeakMap

WeakMap 类似于 Map。但是,WeakMap 只能包含对象作为键。例如,

  1. const weakMap = new WeakMap();
  2. console.log(weakMap); // WeakMap {}
  3. let obj = {};
  4. // adding object (element) to WeakMap
  5. weakMap.set(obj, 'hello');
  6. console.log(weakMap); // WeakMap {{} => "hello"}

当您尝试添加对象以外的其他数据类型时,WeakMap 会引发错误。例如,

  1. const weakMap = new WeakMap();
  2. // adding string as a key to WeakMap
  3. weakMap.set('obj', 'hello');
  1. // throws error
  2. // TypeError: Attempted to set a non-object key in a WeakMap
WeakMap 方法

WeakMap 有方法 get()、set()、delete() 和 has()。例如,

  1. const weakMap = new WeakMap();
  2. console.log(weakMap); // WeakMap {}
  3. let obj = {};
  4. // adding object (element) to WeakMap
  5. weakMap.set(obj, 'hello');
  6. console.log(weakMap); // WeakMap {{} => "hello"}
  7. // get the element of a WeakMap
  8. console.log(weakMap.get(obj)); // hello
  9. // check if an element is present in WeakMap
  10. console.log(weakMap.has(obj)); // true
  11. // delete the element of WeakMap
  12. console.log(weakMap.delete(obj)); // true
  13. console.log(weakMap); // WeakMap {}
WeakMaps 不可迭代

与 Map 不同,WeakMap 不可迭代。例如,

  1. const weakMap = new WeakMap();
  2. console.log(weakMap); // WeakMap {}
  3. let obj = {};
  4. // adding object (element) to WeakMap
  5. weakMap.set(obj, 'hello');
  6. // looping through WeakMap
  7. for (let i of weakMap) {
  8. console.log(i); // TypeError
  9. }

JavaScript Map 和 WeakMap 在ES6中引入的。一些浏览器可能不支持它们的使用。要了解更多信息,请访问 JavaScript Map 支持JavaScript WeakMap 支持

上一教程 :JS Spread Operators Class                                          下一教程 :JS Set

参考文档

[1] Parewa Labs Pvt. Ltd. (2022, January 1). Getting Started With JavaScript, from Parewa Labs Pvt. Ltd: https://www.programiz.com/javascript/map-weakmap

相关文章

最新文章

更多