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

如何比较两个数值数组并返回其中的唯一值?

问题分析与解决

你的代码核心问题有两个:in关键字的误用,以及运算符优先级错误,另外还没处理重复元素的问题。

为什么原代码没效果?

  1. in关键字用错了:in是用来检查对象的属性名/数组索引,不是检查数组里是否包含某个值。比如你写a[i] in b,当a[i]是3时,实际是检查数组b有没有索引为3的元素(也就是第4个元素),而不是检查b里有没有值3。
  2. 运算符优先级错误:!a[i] in b会先计算!a[i](比如数值3取反是false),然后判断false in b,也就是检查b的属性名里有没有"false",这完全和你的需求无关。

修复方案

方案一:用includes()修复原逻辑(适合新手理解)

把in换成Array.prototype.includes()(专门检查数组是否包含某个值),同时添加重复判断,避免结果数组里出现重复元素:

//找出这些数组中的唯一值
let array1 = [1,2,2,2,3]
let array2 = [1,2,2,4]

function unique(a, b) {
    let returnArray = []
    // 处理array1中独有的元素,去重后添加
    for (let num of a) {
        if (!b.includes(num) && !returnArray.includes(num)) {
            returnArray.push(num)
        }
    }
    // 处理array2中独有的元素,去重后添加
    for (let num of b) {
        if (!a.includes(num) && !returnArray.includes(num)) {
            returnArray.push(num)
        }
    }
    return returnArray
}
console.log(unique(array1, array2)) // 输出 [3,4]

方案二:用Set优化效率(推荐)

Set的查找效率比数组includes()高很多,适合处理大数据量的情况:

let array1 = [1,2,2,2,3]
let array2 = [1,2,2,4]

function unique(a, b) {
    const setA = new Set(a);
    const setB = new Set(b);
    const result = [];

    // 筛选出只在array1里出现的元素
    for (let num of setA) {
        if (!setB.has(num)) {
            result.push(num);
        }
    }
    // 筛选出只在array2里出现的元素
    for (let num of setB) {
        if (!setA.has(num)) {
            result.push(num);
        }
    }
    return result;
}
console.log(unique(array1, array2)) // 输出 [3,4]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:45:59