实用主义:ES6数组求交并补集

前言

求交集并集不集基本也是属于面试题中的日常,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方法,将一个可遍历的对象生成为数组

你可能感兴趣的:(实用主义:ES6数组求交并补集)