我试图构建一个函数,它将给定数组的负数求和。 我想在这里使用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()的每一步都在做什么。 我做错了什么,代码是如何在数组中迭代的?
您需要提供一个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);