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

JS嵌套for循环实现两数之和返回空数组的问题排查

问题原因

  • 核心错误是数组判空逻辑完全错误:JavaScript中数组是引用类型,arrResults !== [] 永远返回true——因为等号两边是两个不同内存地址的数组对象,不管arrResults是不是空,这个判断都不会成立。
    你第一次外层循环i=0(对应值11)的时候,内层遍历所有元素都找不到和11相加等于10的数,arrResults还是空数组。这时候执行if (arrResults !== []) 会得到true,直接跳出外层循环,根本不会走到i=1(对应值2)的逻辑,所以最终返回空数组。
  • 次要逻辑问题:
    1. 内层循环j从0开始,会出现同一个元素重复使用、配对顺序颠倒的问题,应该调整为j = i + 1,避免无效配对。
    2. 循环变量i、j没有用let声明,会泄露为全局变量。

修复后代码

function sumPairs(ints, s) {
  let arrResults = [];
  let sumOfTwo;
  // 循环变量用let声明,避免全局泄露
  for (let i = 0; i < ints.length; i++) {
    // j从i+1开始,避免重复配对、同元素复用
    for (let j = i + 1; j < ints.length; j++) {
      sumOfTwo = ints[i] + ints[j];
      if (sumOfTwo === s) {
        arrResults.push(ints[i], ints[j]);
        break;
      }
    }
    // 正确判空:判断数组长度是否大于0
    if (arrResults.length > 0) {
      break;
    }
  }
  return arrResults;
}

console.log(sumPairs([11, 2, 7, 8, 4, 6], 10)); // 输出 [2, 8]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:51:02