我试图编写一个函数,使用forEach和array.shift()+ array.pop()不断地将数组的第一个和最后一个元素加在一起。
问题是for循环没有完成最里面的数字,所以数组总是留有2个值。
代码:
function choreAssignment(chores) {
chores.sort(function(a, b) {return a - b});
var assignment = [];
chores.forEach(function() {
assignment.push((chores.pop() + chores.shift()));
});
return assignment.sort(function(a, b) {return a - b});
}
上面的代码按预期工作,但它将最里面的两个值保留在chores
数组中。
例如,如果我跑:
代码:
var arr = [1, 4, 7, 2, 5, 9, 4, 3];
choreAssignment(arr);
我明白了:
[8, 9, 10]
是的,它增加了9& 1,7和& 2,5和& 3,但它在数组内留下[4,4]。
我不确定为什么会这样。谢谢。
答案 0 :(得分:3)
尝试将forEach更改为:
while (chores.length) {
assignment.push((chores.pop() + chores.shift()));
}
请注意,假设数组
中始终存在偶数个元素