回调函数的返回命令

问题描述 投票:-1回答:1
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在回调函数中的用法。在这个特定问题中,我只想找到等于目标的前两个数字之和并将这些索引值推入结果。在那之后,我不想继续遍历我的函数-这意味着我只想要找到的第一对。我当前的输出为我提供了目标总和的所有索引值。不只是前两个。似乎我没有正确使用我的return命令。我当前的思路是return result向我的参数(value2, index2)的嵌套回调返回一个值。然后将该结果返回给我的(value,index)外部函数。为什么在此return之后我的循环没有停止?

javascript callback
1个回答
1
投票

它没有结束,因为.forEach无法提前终止。 forEach不关注您返回的值。如果要提前终止,则需要使用其他方法。

如果要坚持使用数组方法,则有.some.every。前者一直持续到函数运行返回true为止,后者一直持续到函数运行返回false为止。这些是用于对数组的每个元素进行复合或的操作,但也可以用于您的情况。

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

或者您可以在停止循环时使用带有break关键字的标准for循环。

© www.soinside.com 2019 - 2024. All rights reserved.