首先set的介绍
set这个方法是es6新提出来的,这个方法类似于数组,但是set里面的值是唯一的不允许重复,多用于去重。
set本身是一个构造函数,里面可以存储任意类型的数据的唯一值。
set的几种常见方法
add():用于数据的添加。
delete():用于数据的删除。
size():用于计算set对象的大小(相当于数组的长度)。
clear():清空数据。
has():用于寻找set对象中是否存在某个值。
示例:
let set = new Set([1,1,2,2,3,4])
console.log(set); // 输出:1,2,3 ,4 原因:set方法自动去重
console.log(set.add('a')); // 输出:1,2,3,4,a
console.log(set.has('a')); //输出:true 原因:存在返回true,否则false
console.log(set.delete(1)); //输出:true 原因:删除成功返回true,失败返回false
set.clear();
console.log(set.size); //输出:0 原因:set.clear() 已经将对象清空
扩展:运用set集合解决两个数组之间的并集、交集和差集
并集就可以将两个数组拼接起来,用set集合去重。
交集就先将数组去重,然后使用数组方法filter筛选,使用has方法找出集合中相同的数据。
差集先将两个数组去重,然后定义一个空的数组,利用for-of循环遍历的方法将其中一个数组遍历一下,然后用has方法进行判断,将该数组里面没有另一个数组里面的数据,添加到空数组中并返回。
let arr1 = [1,2,3,4,5,6,7]
let arr2 = [1,34,23,5,6,78,99,855]
// 并集
let arr3 = arr1.concat(arr2);
// 去重
console.log(new Set(arr3));
// 交集
const intersection = (a, b) => {
const nArr = new Set(b);
return [...new Set(a)].filter(item => nArr.has(item));
};
console.log(intersection(arr1, arr2));
//数组取差集
function differenceSet(arr1, arr2) {
let set1 = new Set(arr1);
let set2 = new Set(arr2);
let subset = [];
for (let item of set1) {
if (!set2.has(item)) {
subset.push(item);
}
}
return subset;
}
console.log(differenceSet(arr2, arr1));