提问者:小点点

在JavaScript中使用reduce()对数组的负数求和


我试图构建一个函数,它将给定数组的负数求和。 我想在这里使用reduce()函数(是的,还有其他方法)。 这似乎是一个非常简单的练习。 使用三进制运算符检查number是否为负数,从而将其与总数相加。 然而,结果并不像我希望的那样:

null

const reducer = (tot, num) => ((num < 0) ? tot + num : tot);
const sumOfNegative = numbers => numbers.reduce(reducer);

console.log(sumOfNegative([3, -1, 0]))
// => 2

null

预计这里会得到-1。 我不确定是否很好地掌握了reduce()的每一步都在做什么。 我做错了什么,代码是如何在数组中迭代的?


共2个答案

匿名用户

您需要提供一个initilaValue参数。 否则,累加器tot设置为3

null

const reducer = (tot, num) => (num < 0) ? tot + num : tot;
const sumOfNegative = numbers => (numbers.length === 0 ? 0 : numbers.reduce(reducer, 0));

console.log(sumOfNegative([3, -1, 0]))

匿名用户

如果您没有为.reduce提供第二个参数,那么它将以第一个值作为累加开始,这意味着不会检查数组的第一个元素是否为负数。

解决方案:提供第二个参数:使其为0。 这也意味着您不再需要三元运算符:

const sumOfNegative = numbers => numbers.reduce(reducer, 0);