Set 是 ES6 中新增的一种数据类型,它类似于数组,但是成员的值都是唯一的,没有重复的值。ES7 对 Set 做了一些增强,本文将详细介绍 Set 的常用方法和用法,以及相比于数组的优势。
Set 的基本用法
创建 Set
通过 new Set()
可以创建一个空的 Set:
----- --- - --- ------ -- -- ---
也可以传入一个数组(或类数组对象)来初始化 Set:
----- --- - --- ------- -- ---- ----------------- -- --- - -- -- - -
注意,如果数组中有重复的元素,Set 会自动去重:
----- --- - --- ------- -- -- -- -- ---- ----------------- -- --- - -- -- - -
Set 的常用方法
Set 的常用方法主要有以下几个:
add(value)
:向 Set 中添加一个值,返回 Set 本身。delete(value)
:从 Set 中删除一个值,返回一个布尔值表示是否删除成功。has(value)
:判断 Set 是否包含某个值,返回一个布尔值。clear()
:清空 Set 中的所有值,没有返回值。forEach(callbackFn, thisArg?)
:遍历 Set 中的每个值,并使用回调函数处理,可以有第二个参数指定回调函数中的this
对象。
----- --- - --- ------- -- ---- ----------- -- --- - -- -- -- - - -------------- -- ---- ----------- -- ---- ----------- -- ----- ------------ -- --- --
Set 的优势
相比于数组,Set 的优势有以下几个:
- 去重:Set 自动去重,使得代码更简洁高效。
- 高效的查找:Set 中可以使用
has
方法来判断是否包含某个值,时间复杂度为 O(1),而数组的indexOf
方法时间复杂度最差为 O(n)。 - 更加语义化的集合操作:Set 支持交集、并集、差集等常见的集合操作。
Set 与数组的相互转换
将 Set 转换为数组
可以使用 Array.from 或展开运算符(...)将 Set 转换为数组:
----- --- - --- ------- -- ---- ----- ---- - ---------------- ----- ---- - --------- ------------------ -- --- -- -- ------------------ -- --- -- --
将数组转换为 Set
可以直接使用数组初始化 Set:
----- --- - --- -- --- ----- --- - --- --------- ----------------- -- --- - -- -- - -
Set 实际应用
数组去重
Set 可以轻松地实现数组去重:
----- --- - --- -- -- -- -- --- ----- ---------- - ------- ---------- ------------------------ -- --- -- --
判断两个数组是否有交集
Set 可以轻松地判断两个数组是否有交集:
----- ---- - --- -- --- ----- ---- - --- -- --- ----- ---- - --- ---------- ----- --------------- - ---------------- -- ---------------- ----------------------------- -- ----
数组的并集和差集
使用 Set 可以更加语义化地实现数组的并集和差集:
----- ---- - --- -- --- ----- ---- - --- -- --- ----- ---- - --- ---------- ----- ---- - --- ---------- ----- ----- - --- ------------- ---------- ----- ---------- - --- ------------------------ -- --------------- ------------------- -- --- - -- -- -- -- - - ------------------------ -- --- - -- - -
总结
本文介绍了 ES7 中新增的数据类型 Set,包括基本用法和常用方法,并展示了 Set 相较于数组的优势以及实际应用。Set 在实际开发中会更加简洁高效,更具语义化。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/654f32c47d4982a6eb82f34b