十四、Set集合
大约 1 分钟约 392 字
(一)简介
ES6
提供了新的数据结构Set
(集合)- 类似于数组,但成员的值都是唯一的
- 自动去重
- 实现了
iterator
接口- 所以可以使用扩展运算符
...
和for...of
遍历
- 所以可以使用扩展运算符
1.属性和方法
属性/方法 | 说明 |
---|---|
size | 返回集合的元素个数 |
add | 增加一个新元素,返回当前集合 |
delete | 删除元素,返回 boolean 值 |
has | 检测集合中是否包含某个元素,返回 boolean 值 |
2.声明一个 Set
let s = new Set();
console.log(s, typeof s);
// Set(0) {size: 0} 'object'
let s2 = new Set(["A", "B", "C", "D", "A"]);
console.log(s2);
// Set(4) {'A', 'B', 'C', 'D'}
3.元素个数
console.log(s2.size);
// 4
4.添加新的元素
s2.add("E");
console.log(s2);
// Set(5) {'A', 'B', 'C', 'D', 'E'}
5.删除旧的元素
s2.delete("C");
console.log(s2);
// Set(4) {'A', 'B', 'D', 'E'}
6.检测现有元素
console.log(s2.has("B"));
// true
console.log(s2.has("F"));
// false
7.遍历
for (let v of s2) {
console.log(v);
}
// A
// B
// D
// E
8.清空
s2.clear();
console.log(s2);
// Set(0) {size: 0}
(二)实践
let arr1 = [1, 2, 3, 4, 5, 4, 3, 2, 1];
1.数组去重
let res1 = [...new Set(arr1)];
console.log(res1);
2.交集
let arr2 = [4, 5, 6, 5, 6];
// let res2 = [...new Set(arr1)].filter((item) => {
// let s2 = new Set(arr2); // 4 5 6
// if (s2.has(item)) return true;
// else return false;
// });
let res2 = [...new Set(arr1)].filter((item) => new Set(arr2).has(item));
console.log(res2);
3.并集
let res3 = [...new Set([...arr1, ...arr2])];
console.log(res3);
4.差集
let res4 = [...new Set(arr1)].filter((item) => !new Set(arr2).has(item));
console.log(res4);