十四、Set集合

郁子大约 1 分钟约 392 字笔记ECMAScript尚硅谷李强

(一)简介

  • 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);
上次编辑于: