获取n个数组的交集

Rap*_*nah 3 javascript arrays intersection

使用ES6 Set,给定两个数组,我们可以像这样得到交集:

let a = new Set([1,2,3])
let b = new Set([1,2,4])
let intersect = new Set([...a].filter(i => b.has(i)));
Run Code Online (Sandbox Code Playgroud)

我们怎样才能获得n数组的交集?

更新:

我试图围绕这个用于以下用例.我有一个至少有一个元素的二维数组.

parts.forEach(part => {
  intersection = new Set()
})
Run Code Online (Sandbox Code Playgroud)

你如何获得每个元素(数组)的交集parts

Asa*_*din 6

假设您有一些function intersect(set1, set2) {...}可以交叉两个集合的函数,您可以使用以下方法获取集合数组的交集reduce:

function intersect(a, b) {
    return new Set(a.filter(i => b.has(i)));
}

var sets = [new Set([1,2,3]), ...];
var intersection = sets.reduce(intersect);
Run Code Online (Sandbox Code Playgroud)