什么是 Set?

推荐答案

Set 是 ES6 引入的一种新的数据结构,它类似于数组,但成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。

本题详细解读

Set 的基本用法

Set 数据结构可以通过 new Set() 来创建,并且可以传入一个数组(或具有 iterable 接口的其他数据结构)作为参数来初始化 Set。

在上面的例子中,Set 会自动去除数组中的重复元素。

Set 的属性和方法

Set 实例有以下常用的属性和方法:

  • size: 返回 Set 实例的成员总数。
  • add(value): 添加某个值,返回 Set 结构本身。
  • delete(value): 删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value): 返回一个布尔值,表示该值是否为 Set 的成员。
  • clear(): 清除所有成员,没有返回值。

Set 的遍历

Set 结构的实例有四个遍历方法,可以用于遍历成员:

  • keys(): 返回键名的遍历器。
  • values(): 返回键值的遍历器。
  • entries(): 返回键值对的遍历器。
  • forEach(): 使用回调函数遍历每个成员。

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys()values() 的行为完全一致。

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

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

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

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

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

Set 的应用场景

Set 的主要应用场景包括:

  1. 数组去重:利用 Set 的唯一性,可以轻松实现数组去重。
  2. 存储不重复的值:在某些场景下,需要存储一组唯一的值,Set 是一个很好的选择。
  3. 集合运算:可以通过 Set 实现并集、交集、差集等集合运算。
-- -------------------- ---- -------
-- ----
----- --- - --- -- -- -- -- -- ---
----- --------- - ------- ----------
----------------------- -- --- -- -- -- --

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

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

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

Set 与 WeakSet 的区别

Set 和 WeakSet 都是 ES6 引入的数据结构,但它们有一些重要的区别:

  • WeakSet 的成员只能是对象,而不能是其他类型的值。
  • WeakSet 中的对象是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用。如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
  • WeakSet 不可遍历,因此没有 size 属性和 forEach 方法。

总结

Set 是一种非常有用的数据结构,特别适合处理需要唯一值的场景。它的 API 简单易用,且与数组的互操作性很强,能够方便地进行数组去重和集合运算。

纠错
反馈