如何在相当快的时间内用Javascript INTERSECT
N 个数组?
即。
arr1 = [1,2,3,4,5];
arr2 = [1,2,3,4];
arr3 = [4];
arr4 = [4,5];
结果: [4]
答案 0 :(得分:1)
您可以使用Set
和Array#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)