在 JavaScript 中,我们经常需要使用键值对的数据结构。在 ES6 中,有两种新的数据结构 Map 和 WeakMap 可以帮助我们更方便地处理键值对。
Map
Map 是一种集合,它可以存储任意类型的键和值,并且提供了一些方便的方法来操作这些键值对。
创建 Map
我们可以使用 Map 构造函数来创建一个空的 Map:
const myMap = new Map();
我们也可以在创建时传入一个数组,这个数组中每个元素都是一个键值对:
const myMap = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]);
添加和获取键值对
我们可以使用 set 方法来添加键值对:
myMap.set('key3', 'value3');
我们可以使用 get 方法来获取键对应的值:
myMap.get('key3'); // 'value3'
删除键值对
我们可以使用 delete 方法来删除键值对:
myMap.delete('key3');
遍历 Map
我们可以使用 for...of 循环来遍历 Map 中的键值对:
for (const [key, value] of myMap) { console.log(`${key} = ${value}`); }
我们也可以使用 forEach 方法来遍历 Map 中的键值对:
myMap.forEach((value, key) => { console.log(`${key} = ${value}`); });
Map 的长度
我们可以使用 size 属性来获取 Map 中键值对的数量:
myMap.size; // 2
WeakMap
WeakMap 也是一种集合,它可以存储任意类型的键和值,但是它的键必须是对象。与 Map 不同的是,WeakMap 的键是弱引用的,这意味着如果键对象没有被引用,它们将被自动垃圾回收。
创建 WeakMap
我们可以使用 WeakMap 构造函数来创建一个空的 WeakMap:
const myWeakMap = new WeakMap();
添加和获取键值对
我们可以使用 set 方法来添加键值对:
const key = {}; myWeakMap.set(key, 'value');
我们可以使用 get 方法来获取键对应的值:
myWeakMap.get(key); // 'value'
删除键值对
我们可以使用 delete 方法来删除键值对:
myWeakMap.delete(key);
WeakMap 的长度
由于 WeakMap 的键是弱引用的,我们不能像 Map 一样使用 size 属性来获取 WeakMap 中键值对的数量。如果我们需要知道 WeakMap 中键值对的数量,我们可以使用自定义的计数器:
let counter = 0; for (const key of myWeakMap.keys()) { counter++; }
总结
Map 和 WeakMap 都是 ES6 中的新数据结构,它们可以帮助我们更方便地处理键值对。如果我们需要存储任意类型的键和值,我们可以使用 Map。如果我们需要存储对象的键和值,并且希望键是弱引用的,我们可以使用 WeakMap。
示例代码
下面是一个使用 Map 和 WeakMap 的示例代码:
-- -------------------- ---- ------- ----- ----- - --- ------ ----------------- ---------- ----------------- ---------- ------------------------------- -- -------- ----- --------- - --- ---------- ----- --- - --- ------------------ --------- -------------------------------- -- -------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65505c197d4982a6eb938428