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

如何不使用JavaScript内置方法求两个数组的并集?代码调试求助

数组并集问题修复方案

原代码存在的问题

  • 重复变量声明:连续使用let声明a和b,后声明的变量会覆盖前一个,导致第一个测试用例无法生效。
  • 未处理自身重复元素:若原数组内部有重复值,当前代码仅做合并,不会去重,不符合常规“并集”的定义(通常并集指所有唯一元素的集合)。
  • 内层循环无终止逻辑:找到匹配项后仍会继续遍历数组,造成不必要的性能损耗。

修复方案

方案1:获取去重后的并集(简洁高效版)

利用Set数据结构自动去重的特性,是实现并集最简洁的方式:

// 测试用例1
let a1 = [5, 3];
let b1 = [1, 2, 3, 4, 5];
let union1 = [...new Set([...a1, ...b1])];
console.log(union1); // 输出: [5, 3, 1, 2, 4]

// 测试用例2
let a2 = [2, 2];
let b2 = [1, 1];
let union2 = [...new Set([...a2, ...b2])];
console.log(union2); // 输出: [2, 1]

方案2:基于原逻辑修复(手动实现版)

如果要沿用原代码的循环思路,修复后的代码如下:

// 测试用例1
let a = [5, 3];
let b = [1, 2, 3, 4, 5];
// 先处理a自身的重复(若需要去重)
let uniqueA = [...new Set(a)];
// 遍历b的每个元素
for (let num of b) {
  let exists = false;
  for (let item of uniqueA) {
    if (num === item) {
      exists = true;
      break; // 找到匹配后立即终止循环,提升效率
    }
  }
  if (!exists) {
    uniqueA.push(num);
  }
}
console.log(uniqueA); // 输出: [5, 3, 1, 2, 4]

// 测试用例2
a = [2, 2];
b = [1, 1];
uniqueA = [...new Set(a)];
for (let num of b) {
  let exists = false;
  for (let item of uniqueA) {
    if (num === item) {
      exists = true;
      break;
    }
  }
  if (!exists) {
    uniqueA.push(num);
  }
}
console.log(uniqueA); // 输出: [2, 1]

原代码的核心修改点

  1. 去掉重复的变量声明,每个测试用例使用独立变量避免覆盖。
  2. 添加break语句,找到匹配元素后立即终止内层循环,减少无效遍历。
  3. 增加数组自身去重逻辑,确保最终结果符合“并集”的常规定义。
  4. 若仅需合并数组保留所有元素(不去重),可直接使用a.push(...b),但这不属于并集的标准需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:29