这部分内容我实际上在我的文章中写过,但我感觉这部分是一个比较好的应用,所以就给独立出来。
关于ES6给我们提供的新的数据结构,可以看下我这篇文章:(里面包含了这部分内容)
ES6之深入Set 与 WeakSet的知识讲解
要通过Set 和 Array 来玩转 交/并/差集,还得使用到一个小的知识点: …操作符。
…操作符的作用在数组上时可以帮我们把把数组给展开,变成些散列的值,也可以把我们散列的值收集成一个数组。如下图:
图片标注1: 就是…操作符的展开作用
图片标准2: 就是…操作符的收集作用
交 / 并 / 差集代码实现:
let o = {
name: 'cst'
}
let arr = [11, o, 11, 12, 33, o, 33, 44, 55, 44, {name: 'hfq'}];
// 用Set来实现去重
let os = new Set(arr);
let newArr = [...os];
console.log(newArr);
let arr1 = [1, 2, 3, 4, 5, 3];
let arr2 = [1, 3, 4, 6, 7, 8];
// 交集
let osj1 = new Set(arr1);
let osj2 = new Set(arr2);
let newarrj = [...osj1].filter(ele => osj2.has(ele));
console.log(newarrj);
// 并集
let osbing = new Set([...arr1, ...arr2]);
console.log([...osbing]);
// 差集
let oscj1 = new Set(arr1);
let oscj2 = new Set(arr2);
let newarrc1 = [...oscj1].filter(ele => !oscj2.has(ele));
console.log(newarrc1);
let newarrc2 = [...oscj2].filter(ele => !oscj1.has(ele));
console.log(newarrc2);