You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何获取多数组的交集?数组交集实现问题咨询

多数组交集的简便实现方法

嘿,我来给你分享几个简洁靠谱的方法,帮你快速找出所有数组共有的元素~你之前提到用某个方法时得到错误结果,后来发现是自己代码其他部分的问题,其实这类交集方法本身是没问题的,下面这些通用方案适用于任意数量的数组:

方法一:利用Set逐步缩小范围

Set的查找效率很高,适合用来快速判断元素是否存在。我们可以以第一个数组为基础创建Set,然后遍历剩下的数组,不断过滤出同时存在于当前Set中的元素,更新Set的范围,最后转成数组就是结果:

const arrays = [[1,2,3], [2,3,4], [2,4,5]];
// 初始交集设为第一个数组的Set
let intersection = new Set(arrays[0]);
// 遍历后续每个数组,逐步筛选交集
for (const arr of arrays.slice(1)) {
  intersection = new Set(arr.filter(item => intersection.has(item)));
}
// 转换为数组输出
console.log([...intersection]); // 输出 [2]

方法二:用reduce简化逻辑

如果你喜欢更紧凑的代码,Array.reduce()是个好选择。我们把第一个数组作为初始值,然后每一步都和当前数组取交集,最终得到所有数组的共有元素:

const arrays = [[1,2,3], [2,3,4], [2,4,5]];
const intersection = arrays.reduce((acc, curr) => {
  // 保留acc中同时存在于curr的元素
  return acc.filter(item => curr.includes(item));
}, arrays[0]);

console.log(intersection); // 输出 [2]

处理重复元素的小技巧

如果你的数组里存在重复元素,想要结果自动去重的话,可以在每一步过滤前先把当前交集转成Set去重:

const arrays = [[1,2,2,3], [2,3,4], [2,4,5]];
const intersection = arrays.reduce((acc, curr) => {
  return [...new Set(acc)].filter(item => curr.includes(item));
}, arrays[0]);

console.log(intersection); // 输出 [2]

这些方法都很灵活,不管你是处理3个数组还是更多,都能轻松搞定~

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:26:06