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

如何用JavaScript在数组中找出和为10的两个不同元素?

问题分析与修复方案

你的原函数核心问题在于仅检查了单个元素自身相加是否等于目标值,完全没有去寻找数组中另一个不同的元素来满足和为10的要求,同时即使找到符合条件的元素,也会重复添加同一个值,不符合“两个不同元素”的需求。

下面提供两种可行的修复方案:

方案一:双层循环(直观易懂)

通过两层循环遍历数组,外层循环固定一个元素,内层循环从外层元素的下一个位置开始遍历,确保两个元素是不同位置的(即不同的元素),当找到和为10的元素对时直接返回结果。

function sum(array) {
    const target = 10;
    // 外层循环遍历每个元素
    for (let i = 0; i < array.length; i++) {
        // 内层循环从i+1开始,避免重复检查同一对元素
        for (let j = i + 1; j < array.length; j++) {
            if (array[i] + array[j] === target) {
                return [array[i], array[j]];
            }
        }
    }
    // 未找到符合条件的元素对时返回空数组
    return [];
}

let array = [3, 5, -4, 8, 11, 1, -1, 6];
console.log(sum(array)); // 输出 [-1, 11](或[11, -1],取决于遍历顺序)

这种方法逻辑简单,适合小体量数组,但时间复杂度为O(n²),数组较大时效率偏低。

方案二:哈希表法(高效最优)

利用Set记录已经遍历过的元素,遍历每个元素时计算需要的补数(目标值减去当前元素),如果补数已经在Set中,说明之前已经遇到过这个补数,直接返回这对元素即可;如果不在,就把当前元素存入Set继续遍历。

function sum(array) {
    const target = 10;
    const seen = new Set();
    for (const num of array) {
        const complement = target - num;
        if (seen.has(complement)) {
            return [complement, num];
        }
        seen.add(num);
    }
    return [];
}

let array = [3, 5, -4, 8, 11, 1, -1, 6];
console.log(sum(array)); // 输出 [11, -1]

这种方法仅需遍历一次数组,时间复杂度为O(n),空间复杂度为O(n),适合处理大规模数组。

扩展:返回所有符合条件的元素对

如果需要返回数组中所有和为10的不同元素对,而非仅第一组,可以修改代码如下(以哈希表法为例):

function sum(array) {
    const target = 10;
    const seen = new Set();
    const result = [];
    for (const num of array) {
        const complement = target - num;
        if (seen.has(complement)) {
            result.push([complement, num]);
        }
        seen.add(num);
    }
    return result;
}

let array = [3, 5, -4, 8, 11, 1, -1, 6];
console.log(sum(array)); // 输出 [[11, -1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:05:25