javascript - 迭代 New Map() 并在迭代完成之前返回

标签 javascript dictionary

我正在尝试学习一些在 javascript 中处理列表的新方法。基本上这个函数的作用是接受一个整数数组,它尝试找到两个匹配的结果 TargetSum,如果找到,它应该返回这两个排序的数组。

我遇到的问题是,虽然返回正确,但由于 forEach 始终运行完整迭代,因此可以对其进行优化。

我应该如何将其更改为一旦有比赛就返回?

function twoNumberSum(array, targetSum) {
  array = array.reduce((acc, curr) => {
    acc.set(curr, curr);
    return acc;
  }, new Map());

  let res = [];

  array.forEach(item => {
    const missingInc = targetSum - item;

    if (array.has(missingInc)) {
      res = [item, array.get(missingInc)].sort((a, b) => a > b)
    }
  })

  return res;
}

console.log(twoNumberSum([3, 5, -4, 8, 11, 1, -1, 6], 10))

最佳答案

您可以使用 for...of 迭代数组,并在找到一对后立即返回。

注意:检查 missingInc !== item 存在,因为您使用 map ,并且如果 number * 2 === targetSum ,它总是会找到数字本身,在本例中为 5 + 5 = 10。该问题在您的代码中并不明显,因为您返回了找到的最后一对。

function twoNumberSum(array, targetSum) {
  const map = new Map(array.map(item => [item, item]));
  
  for(const item of map.values()) {
    const missingInc = targetSum - item;
    
    if (missingInc !== item && map.has(missingInc)) {
      return [item, missingInc].sort((a, b) => a > b)
    }
  }

  return [];
}

console.log(twoNumberSum([3, 5, -4, 8, 11, 1, -1, 6], 10))

关于javascript - 迭代 New Map() 并在迭代完成之前返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574265/

相关文章:

javascript - 如何让点击div时出现弹出框?

javascript - 如果我刷新几次,为什么我的应用程序会在 Chrome 中崩溃?

javascript - 它无法识别导入文件中的文件

python - 如何将字典与相同的键结合起来?

android - onTap 如何在 android mapview 中工作

python - 在字典中查找出现次数最少的值

javascript - 隐藏侧边栏时,Datatables 表头不会调整大小

javascript - 当我拖动时,dragend、dragenter 和 dragleave 会立即发射

dictionary - 如何检查 map 是否包含Go中的键?

c# - 如何通过 LINQ to XML 创建 Dictionary<int, string>?