【ES6】Set(集合)

74 阅读1分钟

定义

ES6(ECMAScript 2015)中引入的Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。

主要特性

  1. 成员唯一性Set中的值只能出现一次,即它是唯一的。
  2. 无序性Set中的元素没有特定的顺序,即你不能通过索引来访问Set中的元素。
  3. 可以包含任何类型的值Set可以包含字符串、数字、对象等任何类型的值。

集合基础使用

创建Set

let mySet = new Set();

添加元素

使用add()方法向Set中添加元素。

mySet.add(1);  
mySet.add('some text');  
mySet.add({name: 'John'});

删除元素

使用delete()方法从Set中删除元素。

mySet.delete(1);

检查元素是否存在

使用has()方法检查Set中是否存在某个元素。

console.log(mySet.has('some text')); // 输出:truefalse

遍历Set

  • 使用for...of循环
for (let item of mySet) {  
  console.log(item);  
}
  • 使用forEach()方法
    mySet.forEach(value => console.log(value));
  • 转换为数组
let myArray = [...mySet];  
// 或者  
let myArray = Array.from(mySet);

注意事项

  • Set中的值都是唯一的,但是对象的比较是引用比较,即两个对象即使内容相同,也被视为不同的值。
  • Setsize属性返回Set对象中元素的数量。

Set实践

数组去重

//1. 数组去重
 let arr = [1,2,3,4,5,4,3,2,1];
let result = [...new Set(arr)];
console.log(result);

交集

//2. 交集
let arr2 = [4,5,6,5,6];
let result = [...new Set(arr)].filter(item => {
let s2 = new Set(arr2);// 4 5 6
if(s2.has(item)){
       return true;
  }else{
     return false;
    }
});
let result = [...new Set(arr)].filter(item => new Set(arr2).has(item));
 console.log(result);

并集

//3. 并集
// let union = [...new Set([...arr, ...arr2])];
// console.log(union);

差集

//4. 差集
let diff = [...new Set(arr)].filter(item => !(new Set(arr2).has(item)));
console.log(diff);