JavaScript ES6 Set 对象

  • 原型方法
    • add()、delete()、has()、clear()、 size
  • Set 对象允许存储任何类型的唯一值,原始值或引用值都可。
  • 特殊值
    • +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复。
    • undefined 与 undefined 是恒等的,所以不重复。
    • NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。

创建

1const mySet = new Set()
2mySet.add(5) // Set(1) {5}
3mySet.add(5) // Set(1) {5} 值的唯一性
4
5mySet.add({ a: 1, b: 2 })
6mySet.add({ a: 1, b: 2 })
7// Set(5) {1, {…}, {…}}
8// 对象之间引用不同不恒等,即使值相同,Set 也能存储

转换

1// Array 转 Set
2var mySet = new Set(['value1', 'value2', 'value3']) // {"value1", "value2", "value3"}
3
4// 用...操作符,将 Set 转 Array
5const myArray = [...mySet] // ["value1", "value2", "value3"]
6
7// String
8// String 转 Set
9var mySet = new Set('hello') // Set(4) {"h", "e", "l", "o"}
10// 注:Set 中 toString 方法是不能将 Set 转换成 String

数组去重

1const mySet = new Set([1, 2, 3, 4, 4]);
2[...mySet] // [1, 2, 3, 4]

并集

1const a = new Set([1, 2, 3])
2const b = new Set([4, 3, 2])
3const union = new Set([...a, ...b]) // {1, 2, 3, 4}
4/* 解构传入,唯一值,相当于去重 */

交集

1const a = new Set([1, 2, 3])
2const b = new Set([4, 3, 2])

Set.has(x) 是 set 中的一个方法。

判断当前 set 对象 中是否含有 x,返回 true/false。

1const intersect = new Set([...a].filter(x => b.has(x))) // {2, 3}

[...a] 解构成数组。filter 过滤

传入 x,返回 set 对象 b 中是否存在 x

存在返回 true,不存在返回 false 被过滤掉

差集

与交集同理

1const a = new Set([1, 2, 3])
2const b = new Set([4, 3, 2])
3const difference = new Set([...a].filter(x => !b.has(x))) // {1}