Set

特点

类似数组,但成员是唯一的,并且遍历顺序按插入顺序。

本质

Set 本身是一个构造函数。

添加

set.add()

参数

  • 接受一个数组作参数
  • 接受一个类数组对象作参数

    作用

    数组去重
    字符串去重

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 返回的是相同的东西。

遍历的应用

数组的去重
获取数组的并集、交集和差集

  1. let arr1 = [1, 2, 3]
  2. let arr2 = [3, 4, 5]
  3. let s1 = new Set(arr1)
  4. let s2 = new Set(arr2)
  5. // 并集
  6. let arr3 = new Set([...s1, ...s2])
  7. // 交集
  8. let arr4 = [...s1].filter(v => s2.has(v))
  9. // 差集
  10. 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)