Set
特点
本质
添加
参数
Set 实例的属性
Set.prototype.constructor
Set.prototype.size =》Set 实例成员数量
Set 实例的操作方法
.add(value) // 返回set 实例本身
.has(value) // 返回布尔值
.delete(value) // 返回布尔值,表示是否删除成功
.clear() // 清楚所有成员,没有返回值
Set实例的遍历方法
特点: 遍历的顺序是插入的顺序
set.keys()
set.values()
set.entries()
set.forEach()
因为set没有键名,所以keys 和 values 返回的是相同的东西。
遍历的应用
数组的去重
获取数组的并集、交集和差集
let arr1 = [1, 2, 3]
let arr2 = [3, 4, 5]
let s1 = new Set(arr1)
let s2 = new Set(arr2)
// 并集
let arr3 = new Set([...s1, ...s2])
// 交集
let arr4 = [...s1].filter(v => s2.has(v))
// 差集
let arr5 = Array.from(new Set([...s1, ...s2])).filter(v => (!s1.has(v) || !s2.has(v)))
WeakSet
与Set 的区别
- WeakSet 的成员只能是对象
- WeakSet 中的对象都是弱引用,即垃圾回收机制会自动回收WeakSet 的对象占用的内存。
- WeakSet 没有size 属性,不能遍历
创建
构造函数 new WeakSet()
对象成员只能是对象,否则报错
WeakSet 的方法
let ws = new WeakSet()
ws.add(obj)
ws.has(obj)
ws.delete(obj)