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
之后我的循环没有停止?
它没有结束,因为.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循环。