我正在尝试学习一些在 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/