gpt4 book ai didi

javascript - 为什么reduce()的第一个参数返回未定义?

转载 作者:行者123 更新时间:2023-11-28 14:55:09 24 4
gpt4 key购买 nike

我正在尝试编写一个接受数组作为输入的函数。如果整数为正数,则对其进行计数。如果整数为负数,则将其相加。

我认为 js 中的 reduce() 帮助器将是解决此问题的最佳方法,但是当它运行时,我一直为我的第一个参数返回未定义。

这是我的代码:

function countPositivesSumNegatives(input) {
let countPositive = 0;
let sumNegative = 0

if (input === null || input === []){
return [];
} else {
return input.reduce(function(prev,num){
if (num > 0) {
countPositive++;
}else{
sumNegative = prev + num};
}, 0);
}
return [countPositive, sumNegative];
}

它向我抛出一个类型错误,内容如下:

类型错误:无法读取未定义的属性“0”

当我将“prev”记录到reduce函数内部的控制台时,它会记录除第一个输入之外的所有输入的未定义。正如预期的那样,第一个是 0。但是对于每个后续输入,它都会记录未定义。为什么会发生这种情况?

提前致谢。

最佳答案

传递给 .reduce() 的回调需要返回累积值(该值将作为 prev 传递到循环的下一次迭代。您没有返回任何内容,您的循环的下一次迭代将得到 undefined

这使您想要做的事情变得复杂,因为您试图跟踪循环中的两个值。因此,您要么必须完全避免使用 prev,要么必须使其成为一个包含您的值的数据结构。您的使用不是 .reduce() 的教科书示例。通过使用 .forEach()for/of 进行迭代,您的代码可能会更简单。

function countPositivesSumNegatives(input) {
let countPositive = 0;
let sumNegative = 0

if (!input || input.length === 0){
return [];
} else {
input.forEach(function(num){
if (num > 0) {
++countPositive;
} else {
sumNegative += num;
});
}
return [countPositive, sumNegative];
}

关于javascript - 为什么reduce()的第一个参数返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43171120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com