Return回调函数命令

Return Command for Callback Functions

function twoSum(numbers, target) {
  var result = [];

  numbers.forEach(function(value, index) {
    return numbers.forEach(function(value2, index2) {
      if (value + value2 === target) {
        result.push(index, index2);
        return result;
      }
    }) 
  })
  return result;
}

twoSum([1, 2, 3], 4);
//Output - [ 0, 2, 1, 1, 2, 0 ]

你好 - 我正在处理一个特定的代码战问题,我似乎误解了 return 回调函数的用法。在这个特定问题中,我只想找到等于目标的前两个数字总和并将这些索引值推入结果。我不想在那之后继续迭代我的函数 - 这意味着我只想要找到的第一对。我当前的输出为我提供了目标总和的所有索引值。不仅仅是前 2 个。看来我没有正确使用我的 return 命令。我目前的想法是 return result return 是我的嵌套回调参数 (value2, index2) 的一个值。该结果然后 returned 到我 (value,index) 的外部函数。为什么我的循环在 return 之后没有停止?

它没有结束,因为.forEach不能提前结束。 forEach 没有关注您 return 的值。如果您想提前终止,则需要使用不同的方法。

如果你想坚持使用数组方法,有.some.every。前者一直持续到你的函数 运行 为真,后者一直持续到你的函数 运行 为假。这些用于对数组的每个元素执行复合 OR 和复合 AND,但它们也可以用于您的情况。

numbers.some(function(value, index) {
  return numbers.some(function(value2, index2) {
    if (value + value2 === target) {
      result.push(index, index2);
      return true;
    }
    return false;
  }) 
})

或者您可以使用标准的 for 循环,当您想停止循环时使用 break 关键字。

除了外部函数的无效 return 语句外,您需要采取一种不同的方法,它只使用一个循环和一个对象来存储找到的值的索引。

function twoSum(numbers, target) {
    var indices = {};

    for (let i = 0; i < numbers.length; i++) {
        const number = numbers[i];
        if (number in indices) return [indices[number], i];
        indices[target - number] = i;
    }
}

console.log(twoSum([1, 2, 3], 4));