前言
求交集并集不集基本也是属于面试题中的日常,ES5会利用数组的各种遍历方法,函数复杂,不容易理解。ES6中引入新的Set结构,使得这些求集合变得简单起来。
实现代码
let arrA = [1,2,3,3];
let arrB = [2,4,5,6];
let setA = new Set(arrA);
let setB = new Set(arrB);
//求并集
let unionSet = new Set([...setA, ...setB]);
console.log(Array.from(unionSet));
//求交集
let intersectionSet = new Set([...setA].filter(x => setB.has(x)));
console.log(Array.from(intersectionSet));
//求补集
let differenceSet = new Set([...setA].filter(x => !setB.has(x)));
console.log(Array.from(differenceSet));
打印结果
[ 1, 2, 3, 4, 5, 6 ]
[ 2 ]
[ 1, 3 ]
简单讲解
Set
ES6中引入的新结构,不允许有重复的值。通过new Set()生成,可以接收一个数组为参数。有add添加 delete删除 has判断是否拥有等方法
[...SetA]
解构方法,将一个具有Symbol.iterator接口(简单理解就是可以通过for of遍历的对象。这也是ES6的方法)的对象解构为数组
.filter
数组的遍历方法,返回一个方法内为true的数组值
x => setB.has(x)
箭头函数,等价于function(x) { return setB.has(X)};
Array.from()
ES6方法,将一个可遍历的对象生成为数组