【发布时间】:2018-03-22 21:19:25
【问题描述】:
我处理了一个问题,其中给你一个数字数组和一个目标总和,你的工作是找到一对总和等于目标数字的数字。这是我使用简单嵌套 for 循环的解决方案:
function findPairForSum(integers, target) {
var output = [];
for (var i = 0; i < integers.length; i++) {
for (var j = 0; j < integers.length; j++) {
if (i !== j && integers[i] + integers[j] === target) {
output.push(integers[i], integers[j]);
return output;
}
}
}
return 'not possible';
}
findPairForSum([3, 34, 4, 12, 5, 2], 9); // --> [4, 5]
我的问题是,有没有一种更简洁的方法来使用高阶函数(也许是 forEach?)来编写这个解决方案
这是我使用 forEach 的尝试:
function findPairForSum(integers, target) {
var output = [];
integers.forEach(function(firstNum) {
integers.forEach(function(secondNum) {
if (firstNum + secondNum === target) {
output.push(firstNum, secondNum);
}
})
})
if (output === []) {
return 'not possible';
}
return output;
}
findPairForSum([3, 34, 4, 12, 5, 2], 9); // --> [ 4, 5, 5, 4 ]
我尝试在两次推送之后返回,但它没有返回任何东西。所以相反,我把回报放在最后。
为什么在最初的两次推送之后它不会返回?我希望它停在那里,只推两个数字。相反,通过将回报放在最后,它推动了 4 个数字。它应该是 [4,5] 但我得到了 [4,5,5,4] 之类的东西。
任何建议和帮助将不胜感激!
【问题讨论】:
-
你一遍又一遍地做同样的计算。你的内部循环应该是
for (var j=i+1 -
建议:使用 C 风格的
for循环。出于性能原因,您希望提前终止,因为您不需要所有组合。但是,您不能像使用 C 风格的 for 循环那样提前终止高阶函数
标签: javascript for-loop foreach