使用ES6的Set求数组的交集、并集、差集

原理

利用Set的 .has(value) 方法 ,判断值是否为 Set 的成员,并组合数组的 .filter()方法,返回新的数组。

简单的数组

1
2
3
4
5
6
7
8
9
10
11
const arr1 = [1, 2, 3, 4]
const arr2 = [3, 4, 5]

// 并集
const merge1 = [...arr1, ...arr2])]

// 交集
const intersect = [...new Set([...arr1].filter(item => arr2.has(item)))]

// 差集
const diff = [...new Set([...arr1].filter(item => !arr2.has(item)))]

带对象的数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const arr1 = [
{ id:1, a:123, b:1234 },
{ id:2, a:123, b:1234 },
{ id:3, a:123, b:1234 }
]
const arr2 = [
{ id:2, a:123, b:1234 }
]

// 交集
const intersect = [...arr1].filter(item1 => [...arr2].some(item2 => item2.id === item1.id))

// 差集
const diff = [...arr1].filter(item1 => [...arr2].every(item2 => item2.id !== item.id))
-------------本文结束感谢您的阅读-------------