【发布时间】:2021-02-05 14:39:50
【问题描述】:
只要我不传递初始值,网页就可以正常工作,但在这种情况下,它只会给我 TypeError,因为当只有最后一个元素时(如预期的那样)。这就是为什么我试图将 0 作为初始值传递给 reduce 函数(sn-p 下面的第 4 行)。但是一旦我这样做,它就会破坏整个页面并显示错误代码 6。
我想要达到的目标: 我将数组中所有元素的总和相加,然后将该总和推送到另一个数组,删除第一个元素并重复该过程。当没有剩余元素时,我想从 reduce() 函数返回 0,这就是我尝试传递初始值 (0) 的原因。
function partsSums(ls) {
let sumArr = [];
while (ls.length >= 0) {
sumArr.push(ls.reduce((acc, cur) => acc + cur, 0));
ls.shift();
}
return sumArr;
}
partsSums([0, 1, 3, 6, 10]);
我正在寻找的输出是:[20, 20, 19, 16, 10, 0]
【问题讨论】:
-
将
ls.length >= 0更改为ls.length > 0。 while 循环的条件永远不会为 false,因为数组的长度永远不会低于 0,所以你有一个无限循环。 -
您要查找的输出是什么?
-
当我调用 reduce() fn 的 ls 数组中没有剩余元素时,我想将 0 推送到我的 sumArr 中。如果我将 ls.length 设置为 >0,那么它会在最后一个元素之后停止。我可以在 reduce() fn 之后推 0,但是有什么办法可以在 reduce 函数中做到这一点?
-
我要找的输出是:[20, 20, 19, 16, 10, 0]
-
@Link 你可以在while循环之后添加
sumArr.push(0)。
标签: javascript arrays reduce array.prototype.map