如何使用reduce方法计算多个数组的交集?
找出多个数组的共同元素
嘿,这事儿好办!针对你给出的示例,我给你两种实用的解法,都能轻松得到[3,4]这个结果:
方法一:用filter + every(直观易懂)
思路很简单:以第一个数组为基准,筛选出那些在所有其他数组里都存在的元素。
代码实现:
const myArray = [[1,2,3,4], [2,3,4,5], [3,4,5,6] ]; // 取第一个数组作为基准 const baseArr = myArray[0]; // 过滤出在所有子数组中都存在的元素 const newArray = baseArr.filter(item => { return myArray.every(subArr => subArr.includes(item)); }); console.log(newArray); // 输出: [3,4]
这里filter负责遍历基准数组的每个元素,every则检查这个元素是否在每一个子数组里都存在,两个方法配合就搞定了。
方法二:用Set优化查找效率(适合大数据量)
如果你的数组元素很多,用includes会有点慢(因为数组查找是O(n)复杂度),这时候可以把每个子数组转成Set,利用Set.has()的O(1)快速查找特性来优化性能:
代码实现:
const myArray = [[1,2,3,4], [2,3,4,5], [3,4,5,6] ]; // 将所有子数组转为Set,方便快速查找 const setArray = myArray.map(subArr => new Set(subArr)); // 以第一个数组为基准筛选符合条件的元素 const newArray = myArray[0].filter(item => { return setArray.every(set => set.has(item)); }); console.log(newArray); // 输出: [3,4]
这种方法在处理大规模数据的时候,性能表现会比第一种好不少~
内容的提问来源于stack exchange,提问作者mauabe
相关产品推荐
相关产品推荐

