Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代地将数组中的第一个和最后一个数字相加_Javascript_Arrays - Fatal编程技术网

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

Javascript 迭代地将数组中的第一个和最后一个数字相加,javascript,arrays,Javascript,Arrays,我试图编写一个函数,使用forEach with array.shift()+array.pop()不断地将数组的第一个和最后一个元素相加 问题是for循环没有完成最里面的数字,因此数组中始终保留2个值 代码: function choreAssignment(chores) { chores.sort(function(a, b) {return a - b}); var assignment = []; chores.forEach(function() { assignme

我试图编写一个函数,使用forEach with 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});
}
var arr = [1, 4, 7, 2, 5, 9, 4, 3];
choreAssignment(arr);
上面的代码按预期工作,但它在
chores
数组中保留了最里面的两个值

例如,如果我运行:

代码:

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});
}
var arr = [1, 4, 7, 2, 5, 9, 4, 3];
choreAssignment(arr);
我得到:

[8, 9, 10]
也就是说,它添加了9&1、7&2、5&3,但在数组中保留了[4,4]


我不知道这是为什么。谢谢。

尝试将forEach更改为:

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

注意:这假设数组中总是有偶数个元素

您的示例和描述似乎不匹配。对于示例输入
[1,4,7,2,5,9,4,3]
,我希望输出是
[4,8,16,7]
。它首先将杂务算法从最小值排序到最大值。因此,在使用>shift()和pop()之前,这些值被列为[1,2,3,4,4,5,7,9],因此它将9+1,7+2和5+3相加,但由于某种原因,不是4+4。谢谢,这很有效。你能详细解释一下为什么这个方法有效,但forEach没有?我不明白为什么一个可以工作而另一个不行。@JonathanBechtel在迭代数组时从数组中删除元素通常是个坏主意。@pzp感谢您的反馈。我想用reduce,但是没有把点连接起来,所以我用了这个方法。这不会在生产中使用,它只是踢轮胎而已。