# JavaScript ES6 Set 对象

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

# 创建

let mySet = new Set();
mySet.add(5); // Set(1) {5}
mySet.add(5); // Set(1) {5} 值的唯一性

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

# 转换

// Array 转 Set
var mySet = new Set(["value1", "value2", "value3"]);// {"value1", "value2", "value3"}

// 用...操作符,将 Set 转 Array
var myArray = [...mySet];// ["value1", "value2", "value3"]

// String
// String 转 Set
var mySet = new Set('hello'); // Set(4) {"h", "e", "l", "o"}
// 注:Set 中 toString 方法是不能将 Set 转换成 String
1
2
3
4
5
6
7
8
9
10

# 数组去重

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

# 并集

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

# 交集

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

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

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

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

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

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

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

# 差集

与交集同理

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}
1
2
3
最后更新时间: 2021年9月23日 18:09:31