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

如何用JavaScript高阶函数实现两数之和配对查找功能

用JavaScript高阶函数实现两数之和配对查找

嘿,我来帮你把原来的嵌套循环方案改成更简洁优雅的高阶函数版本!这里我们可以利用数组的高阶函数结合集合来优化,不仅代码更清爽,时间效率也能从O(n²)提升到O(n)。

方案一:使用Array.prototype.find()(推荐)

这个方案用find高阶函数遍历数组,一旦找到符合条件的元素就停止遍历,完美贴合你原代码“找到第一对就返回”的逻辑:

function findPairForSum(integers, target) {
  const seenNumbers = new Set();
  
  // 用find遍历数组,定位第一个能配对的数字
  const matchedNum = integers.find(currentNum => {
    const complement = target - currentNum;
    // 如果补数已经被记录过,说明找到了配对
    if (seenNumbers.has(complement)) {
      return true;
    }
    // 没找到的话,把当前数字加入已记录集合
    seenNumbers.add(currentNum);
    return false;
  });
  
  // 根据结果返回对应内容
  return matchedNum ? [target - matchedNum, matchedNum] : 'not found';
}

方案二:使用Array.prototype.forEach()

如果你更习惯用forEach这种遍历型的高阶函数,也可以这样实现:

function findPairForSum(integers, target) {
  const seenNumbers = new Set();
  let resultPair = null;
  
  integers.forEach(currentNum => {
    const complement = target - currentNum;
    if (seenNumbers.has(complement)) {
      resultPair = [complement, currentNum];
    }
    seenNumbers.add(currentNum);
  });
  
  return resultPair || 'not found';
}

比原方案更优的点

  • 原嵌套循环是暴力遍历,每个元素都要和其他所有元素比对,效率偏低;而这里用Set存储已遍历元素,查找补数仅需O(1)时间,整体效率大幅提升
  • 高阶函数的写法更符合现代JavaScript风格,不用手动管理循环索引,代码可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:46