迭代地将数组中的第一个和最后一个数字相加

时间:2016-12-26 19:39:10

标签: javascript arrays

我试图编写一个函数,使用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]。

我不确定为什么会这样。谢谢。

1 个答案:

答案 0 :(得分:3)

尝试将forEach更改为:

while (chores.length) {
    assignment.push((chores.pop() + chores.shift()));
}

请注意,假设数组

中始终存在偶数个元素