js求两个数组的交集|并集|差集|去重

let a = [1,2,3], b= [2, 4, 5];

1.差集

(a-b 差集:属于a但不属于b的集合)  a-b = [1,3]

(b-a 差集:属于b但不属于a的集合)  b-a = [4,5]

1) 第一种解决方案: filter+includes

let difference = a.concat(b).filter(v => !a.includes(v))
console.log(difference)   //[4,5]

2) 第二种解决方案:Set+Array.from

ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成Set数据结构。

Set类似于数组,区别在于它所有的成员都是唯一的,不会有重复的值。

Set是一个新的数据结构。

Array.from() 方法可以将 Set结构转为数组。

由于key不能重复,所以,在Set种,没有重复的key。要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set。

var s1 = new Set();  //空Set
var s2 = new Set([1,2,3]); //含1,2,3

 重复元素在Set种自动被过滤:

var s = new Set([1,2,3,3,'3']);
s; // Set {1,2,3,"3"}

 向Set加入值的时候,不会发生类型转换,所以3和'3'是不同的值。

注意数字3和字符串'3'是不同的元素。

new Set的作用是可以将传入的Array去重。

Array.from() 的作用是可以将 Set结构转为数组。

let aSet = new Set(a)
let bSet = new Set(b)
let difference = Array.from(new Set(a.concat(b).filter( v => !aSet.has(v) )))
console.log(difference)   //[4,5]

3) 第三种解决方案:filter+indexOf


2.交集

1) 第一种解决方案:filter+includes

原文地址:https://www.cnblogs.com/still1/p/10788201.html