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