用JavaScript相交数组

时间:2018-07-14 18:07:42

标签: javascript node.js

如何在相当快的时间内用Javascript INTERSECT N 个数组?

即。

arr1 = [1,2,3,4,5];
arr2 = [1,2,3,4];
arr3 = [4];
arr4 = [4,5];

结果: [4]

2 个答案:

答案 0 :(得分:1)

您可以使用SetArray#filter对常见元素采用交集功能。

function common(a, b) {
    return b.filter(Set.prototype.has.bind(new Set(a)));
}

console.log([[1, 2, 3, 4, 5], [1, 2, 3, 4], [4], [4, 5]].reduce(common));

答案 1 :(得分:0)

除非我知道数组很大,否则我只会使用filter()includes()。这将“以合理的速度运行”,并且在您将要加入许多普通大小的数组时,可能比创建一堆集合要快,但是对于更少,非常大的数组,new Set()可能会更快:

let arr1 = [1,2,3,4,5];
let arr2 = [1,2,3,4,5];
let arr3 = [4];
let arr4 = [4,5];

let r = [arr1, arr2, arr3, arr4].reduce((a, c) => a.filter(i => c.includes(i)))
console.log(r)