对reduce()有问题;

时间:2019-05-21 17:18:39

标签: javascript arrays

我不太了解.reduce()方法

我尝试过修改一下代码,我可以看到在第一种情况下,累加器会增加,但在随后的迭代中会变为“未定义”和“ NaN”。不知道为什么在val.voted === true时该值不累积。

srcdoc

结果应为7。

2 个答案:

答案 0 :(得分:4)

您的回调函数必须在下一次迭代期间为累加器返回一个值。当前,您没有 ≢'abcdef' 6 ≢2 3⍴'abcdef' 2 ≢42 1 ≢⍬ 0 ,因此执行会失败并在第一次调用时返回return。要解决此问题,只需添加undefined

return

或者,您可以删除括号,因为您使用的是胖箭头语法:

function totalVotes(arr) {
  return arr.reduce((acc, val) => { return val.voted === true ? acc+=1 : acc;}, 0); 

}

答案 1 :(得分:1)

您需要一个带有块语句的return语句。

一种较短的方法是仅添加布尔值。

function totalVotes(arr) {
    return arr.reduce((sum, { voted }) => sum + voted, 0); 
}

var voters = [{ name: 'Bob', age: 30, voted: true }, { name: 'Jake', age: 32, voted: true }, { name: 'Kate', age: 25, voted: false }, { name: 'Sam', age: 20, voted: false }, { name: 'Phil', age: 21, voted: true }, { name: 'Ed', age: 55, voted: true }, { name: 'Tami', age: 54, voted: true }, { name: 'Mary', age: 31, voted: false }, { name: 'Becky', age: 43, voted: false }, { name: 'Joey', age: 41, voted: true }, { name: 'Jeff', age: 30, voted: true }, { name: 'Zack', age: 19, voted: false }];

console.log(totalVotes(voters)); // 7