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

如何在JavaScript中创建含任意数量数组共有元素的数组?

解决多数组交集问题的正确实现

你的代码只处理前两个数组的原因很明确:循环第一次执行时就直接return了,后面的参数根本没机会参与计算,而且当循环到最后一个数组时,arguments[i+1]会是undefined,调用includes还会报错。

下面是两种用高阶函数实现多数组交集的可行方案:

方案一:利用reduce逐步缩小交集范围

function intersection() {
  if (arguments.length === 0) return [];
  // 把类数组的arguments转换为真实数组
  const arrays = Array.from(arguments);
  // 以第一个数组为初始值,依次和后续每个数组取交集
  return arrays.reduce((currentIntersection, nextArray) => {
    return currentIntersection.filter(item => nextArray.includes(item));
  });
}

方案二:用filter+every直接筛选全局存在的元素

function intersection() {
  if (arguments.length === 0) return [];
  // 解构出第一个数组和剩余所有数组
  const [firstArray, ...otherArrays] = Array.from(arguments);
  // 筛选出第一个数组中,在所有剩余数组里都存在的元素
  return firstArray.filter(item => {
    return otherArrays.every(array => array.includes(item));
  });
}

测试示例

console.log(intersection([1,2,3], [2,3,4], [3,4,5])); // 输出 [3]
console.log(intersection([1,2], [1,2], [1])); // 输出 [1]
console.log(intersection([5])); // 输出 [5]
console.log(intersection()); // 输出 []

原代码的核心问题

  1. 循环仅执行一次就return,后续参数完全被忽略
  2. 未处理参数为空或只有一个数组的边界情况
  3. 当遍历到最后一个数组时,arguments[i+1]为undefined,调用includes会抛出错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:45:34