我想写一个函数,它接受一个数组作为输入。如果整数是正数,则对其进行计数。如果整数是负数,则它将它相加。reduce()的第一个参数为什么返回undefined?
我觉得在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”的未定义
当我登录“下一页”到控制台在reduce函数内部,除了第一个输入外,其它日志都是未定义的。如预期的那样,第一个是0.但是对于每个后续输入,其日志未定义。这是为什么发生?
在此先感谢。
啊,这是有道理的。我记得教我关于reduce()的人强调'回归'总是成为回调的一部分。 – newman
还注意到空数组的条件测试是无效的 – charlietfl
@newman - 我添加了一个使用'.forEach()'的实现,我认为它比尝试使'.reduce()适合这里更简单。 – jfriend00