一、set集合及方法
1.1、它是一种数据结构
1.2、类似于数组,但成员的值都是唯一的
1.3、实现了迭代器接口,可以使用扩展运算符和for ...of遍历
二、属性和方法:
2.1、size:返回集合的元素个数
2.2、add:增加一个新元素,返回当前集合
2.3、delete:删除元素,返回一个boolean值
2.4、has:检查集合中是否包含某元素,返回boolean值
注意:
上面说到其中值是唯一的,如果在new一个集合实例时,集合中有重复的值,它会自动去重,new 一个集合对象时,需要传入一个数组,因此常用来将数组转化为集合
使用扩展运算符和集合,灵活地对数组进行操作
三、声明一个set
3.1、传入一个对象数组
const set = new Set([{ id: 0, num: 1 }, { id: 1, num: 2 }])
console.log(set);
打印值
image.png3.2、传入一个基本类型的数组
注意
3.2.1
向Set加入值的时候,不会发生类型转换,所以 0 和 "0" 是两个不同得值,它类似于运算符( === ),
3.2.2
上面说到key是唯一的,所以在new一个集合实例时,如果有重复的值,会自动去重;
const set = new Set([0, '0', 1, 2, 2])
console.log(set);
console.log(set.size);
打印值
image.png3.3、传入一个字符串
const set = new Set('abcdd')
console.log(set);
console.log(set.size);
打印值
image.png四、常用
4.1、基本数据类型数组去重
let arr = [0, 0, 1, 2, 2]
console.log([...new Set(arr)]); //[0,1,2]
4.2、对象数组去重
let arr = [{ id: 0, num: 1 }, { id: 1, num: 2 }, { id: 1, num: 2 }]
// 将数组中的每一条对象都变成字符串
arr = arr.map((item) => JSON.stringify(item))
// 去重
arr = [...new Set(arr)]
arr = arr.map((item) => JSON.parse(item))
console.log(arr);
image.png
4.3、求两个数组的交集
const arr = [1, 3, 5, 2, 3, 8, 4, 3];
const arr2 = [2, 5, 3, 7];
let res = [...new Set(arr)].filter(item => new Set(arr2).has(item));
console.log(res); // [3, 5, 2]
4.4、求两个数组的并集
const arr = [1, 3, 5, 2, 3, 8, 4, 3];
const arr2 = [2, 5, 3, 7];
let union = [...new Set([...arr, ...arr2])];
console.log(union); //[1, 3, 5, 2, 8, 4, 7]
4.5、求两个数组的差集
const arr = [1, 3, 5, 2, 3, 8, 4, 3];
const arr2 = [2, 5, 3, 7];
let sub = [...new Set(arr)].filter(item => !new Set(arr2).has(item));//注意,比交集加了一个感叹号,表示取反
console.log(sub); // [1, 8, 4]
网友评论