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

请协助实现获取两个数组交集的函数(含待调试代码)

修正数组交集函数的方案

首先咱们先拆解下原函数里的几个核心问题:

  • 函数内部直接重新声明了arrF和arrS,这会完全覆盖掉调用时传入的参数,等于白传了
  • 判断条件用了i == j,这是在比较两个数组的索引,不是数组里的元素,逻辑完全错了
  • 找到第一个匹配的索引就直接return了,根本没法收集所有交集元素,而且还把索引i和j塞进了结果数组,不是我们要的元素本身

下面是修正后的函数,我会把逻辑理清楚:

function getIntersect(arrF, arrS) {
  // 先处理边界情况:如果任一数组为空,直接返回空数组
  if (!arrF || !arrS || arrF.length === 0 || arrS.length === 0) {
    return [];
  }
  
  const nums = [];
  // 遍历第一个数组的每个元素
  for (let i = 0; i < arrF.length; i++) {
    const current = arrF[i];
    // 检查当前元素是否存在于第二个数组中,并且还没被加入结果数组(避免重复)
    if (arrS.includes(current) && !nums.includes(current)) {
      nums.push(current);
    }
  }
  return nums;
}

// 测试一下
const arr1 = [3, 5, 8];
const arr2 = [1, 2, 3, 5, 8];
document.write(getIntersect(arr1, arr2)); // 会输出 3,5,8

如果想要更高效的实现(比如处理大数组时),可以用Set来优化,因为includes的时间复杂度是O(n),用Set的话查找是O(1):

function getIntersect(arrF, arrS) {
  if (!arrF || !arrS || arrF.length === 0 || arrS.length === 0) {
    return [];
  }
  
  // 把第二个数组转成Set,提升查找效率
  const setS = new Set(arrS);
  // 用Set去重,再转成数组
  return [...new Set(arrF.filter(item => setS.has(item)))];
}

这样不管是小数组还是大数据量的数组,都能高效准确地获取交集啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:36