Javascript 迭代地将数组中的第一个和最后一个数字相加
我试图编写一个函数,使用forEach with array.shift()+array.pop()不断地将数组的第一个和最后一个元素相加 问题是for循环没有完成最里面的数字,因此数组中始终保留2个值 代码: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
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,但是没有把点连接起来,所以我用了这个方法。这不会在生产中使用,它只是踢轮胎而已。