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

JavaScript数组查找唯一出现数字:代码仅返回单个结果求解

修正代码以返回数组中所有仅出现一次的数字

你的代码核心逻辑是对的——用对象记录首次出现的元素,重复出现时删除对应键,但最后只取了第一个结果,导致只能返回一个符合条件的数字。以下是修正后的代码:

function printSpecialNumbers(uniqueNum) {
    var obj = {};
    for (var i = 0; i < uniqueNum.length; i++) {
        const num = uniqueNum[i];
        if (typeof obj[num] !== "undefined") {
            delete obj[num];
            continue;
        }
        obj[num] = i;
    }
    // 将对象的所有键转换为数字数组返回
    return Object.keys(obj).map(Number);
}

let result = printSpecialNumbers([1, 5, 1, 7]);
console.log(result); // 输出 [5,7]

关键修正点:

  • 原代码返回Number(Object.keys(obj)[0]),只取了对象的第一个键,改成Object.keys(obj).map(Number)后,会把所有剩余的键(也就是仅出现一次的数字)转换成数字数组返回。
  • 当没有符合条件的数字时,Object.keys(obj)会返回空数组,map后还是空数组,满足需求。

时间效率说明:

这个方案的时间复杂度是O(n):

  1. 遍历数组一次,每个元素的存/删对象键操作都是O(1)。
  2. 最后转换对象键为数组的操作,最多遍历n次(最坏情况所有元素都只出现一次),整体还是线性时间,符合高效要求。

测试用例补充:

// 无特殊数字的情况
console.log(printSpecialNumbers([2,2,3,3])); // 输出 []
// 多个特殊数字的情况
console.log(printSpecialNumbers([4,5,6,4,7])); // 输出 [5,6,7]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:30:47