ES12 提供的新集合类型,如:Map、Set 与 WeakMap 等

阅读时长 6 分钟读完

在 ES12 中,新的集合类型 Map、Set 和 WeakMap 被引入,它们提供了一些新的、更强大的数据结构,有助于开发者更好地处理数据。本文将会对这三个新的集合类型进行详细介绍,并提供一些示例代码和使用指导。

Map

Map 可以看作是一种键值对的集合类型,其中的键和值可以是任意类型的数据。Map 的一个主要特点是它的键可以是任意类型的数据,这与 JavaScript 中的对象有些相似,但是 Map 更为强大。

基本用法

创建一个新的 Map 对象可以使用 new Map(),也可以直接传入一个数组,其中每个元素都是一个键值对的数组。例如:

-- -------------------- ---- -------
-- ------ ---
----- ---- - --- ------

-- ------------ ---
----- ---- - --- -----
  -------- ----------
  -------- ----------
  -------- ---------
---

向 Map 中添加新的键值对可以使用 set(key, value) 方法,获取键对应的值可以使用 get(key) 方法,删除键值对可以使用 delete(key) 方法,检查 Map 中是否存在某个键可以使用 has(key) 方法。

-- -------------------- ---- -------
----- --- - --- ------
--------------- ----------
--------------- ----------

----------------------------- -- -- ------
----------------------------- -- -- ----

-------------------
----------------------------- -- -- -----

迭代器

Map 迭代器可以用来遍历 Map 中的键值对。Map 的迭代器有四种类型,分别是 keys、values、entries 和 Symbol.iterator。其中,Symbol.iterator 是默认的迭代器类型,可以使用 for...of 循环来遍历 Map 中的键值对。

-- -------------------- ---- -------
----- --- - --- -----
  -------- ----------
  -------- ----------
  -------- ---------
---

-- -- --- ---
--- ------ --- -- ----------- -
  -----------------
-

-- -- --- ---
--- ------ ----- -- ------------- -
  -------------------
-

-- -- --- -----
--- ------ ----- ------ -- -------------- -
  ---------------- -------
-

使用场景

Map 的一个常见使用场景是用来存储一些比较复杂的数据结构,例如对象或数组。由于 Map 的键可以是任意类型的数据,因此可以很方便地将一些复杂的数据结构作为键来使用。

另外,Map 也可以用来缓存一些计算结果,以避免重复计算。例如:

-- -------------------- ---- -------
----- ----- - --- ------

-------- ------------ -
  -- -------------- -
    ------ -------------
  -
  
  ----- ------ - - -- - - - - ----------- - -- - ----------- - ---
  ------------ --------
  ------ -------
-

Set

Set 是一种无序、唯一的集合类型,其中的元素可以是任意类型的数据。Set 的一个主要特点是它的元素是唯一的,即一个元素只会出现一次。

基本用法

创建一个新的 Set 对象可以使用 new Set(),也可以直接传入一个数组,其中的元素会被自动去重。向 Set 中添加新的元素可以使用 add(value) 方法,检查 Set 中是否存在某个元素可以使用 has(value) 方法,删除元素可以使用 delete(value) 方法。

迭代器

Set 迭代器可以用来遍历 Set 中的元素。Set 的迭代器有三种类型,分别是 values、entries 和 Symbol.iterator。其中,Symbol.iterator 是默认的迭代器类型,可以使用 for...of 循环来遍历 Set 中的元素。

使用场景

Set 的一个常见使用场景是用来去重。由于 Set 中的元素是唯一的,因此可以很方便地将一个数组中的重复元素去重。

另外,Set 也可以用来判断一个元素是否存在于某个集合中。例如:

WeakMap

WeakMap 是一种弱引用的集合类型,其中的键必须是对象,值可以是任意类型的数据。WeakMap 的一个主要特点是它的键是弱引用的,即如果一个键不再被其他对象引用,它所对应的键值对会被自动删除。

基本用法

创建一个新的 WeakMap 对象可以使用 new WeakMap(),向 WeakMap 中添加新的键值对可以使用 set(key, value) 方法,获取键对应的值可以使用 get(key) 方法,删除键值对可以使用 delete(key) 方法,检查 WeakMap 中是否存在某个键可以使用 has(key) 方法。

使用场景

WeakMap 的一个常见使用场景是用来存储一些与对象相关的数据,例如对象的私有属性。由于 WeakMap 中的键是弱引用的,因此当一个对象被垃圾回收时,与它相关的键值对也会被自动删除,这可以避免内存泄漏。

另外,WeakMap 也可以用来实现一些高级的数据结构,例如缓存一些计算结果并避免重复计算。例如:

-- -------------------- ---- -------
----- ----- - --- ----------

-------- ------------ -
  -- -------------- -
    ------ -------------
  -
  
  ----- ------ - - -- - - - - ----------- - -- - ----------- - ---
  ------------ --------
  ------ -------
-

总结

本文介绍了 ES12 新引入的三种集合类型:Map、Set 和 WeakMap。这三种集合类型各具特点,可以用来解决不同的问题。在实际开发中,我们可以根据具体的需求来选择合适的集合类型。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/668560afdc1ed1a61b6e463e

纠错
反馈