定义
ES6(ECMAScript 2015)中引入的Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。
主要特性
- 成员唯一性:
Set中的值只能出现一次,即它是唯一的。 - 无序性:
Set中的元素没有特定的顺序,即你不能通过索引来访问Set中的元素。 - 可以包含任何类型的值:
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')); // 输出:true 或 false
遍历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中的值都是唯一的,但是对象的比较是引用比较,即两个对象即使内容相同,也被视为不同的值。Set的size属性返回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);