javascript - reduce() 方法从对象数组中返回 NaN

标签 javascript ecmascript-6 reduce

我想使用 reduce() 获取总票数,但我总是收到 NaN结果,不是 20。

我有以下js代码:

 const choiseArray=[
    {choice: "Shooter",url:"/questions/10/choices/01",votes:3},
    {choice: "Shooter2",url:"/questions/10/choices/02",votes:2},
    {choice: "Shooter3",url:"/questions/10/choices/03",votes:4},
    {choice: "Shooter3",url:"/questions/10/choices/03",votes:11},
];
const reducer = (accumulator, currentValue) => parseInt(accumulator.votes) + parseInt(currentValue.votes);

const totalVotes= choiseArray.reduce(reducer);

console.info(totalVotes);

你能告诉我我做错了什么以及为什么吗?

最佳答案

您当前的问题是:在第一次迭代中,您有 accumulator.votes + currentValue.votes,在第二次迭代中,accumulator 是现在是一个数字(计算结果),不再是一个对象,因此它没有属性votes,这就是为什么你得到NaN

解决方案: 调用您的函数,将 0 作为 reduce 第二个参数传递,这将是累加器,然后在您的函数中将值求和到其中,而不访问 accumulator.votes.

const choiseArray = [{
    choice: "Shooter",
    url: "/questions/10/choices/01",
    votes: 3
  },
  {
    choice: "Shooter2",
    url: "/questions/10/choices/02",
    votes: 2
  },
  {
    choice: "Shooter3",
    url: "/questions/10/choices/03",
    votes: 4
  },
  {
    choice: "Shooter3",
    url: "/questions/10/choices/03",
    votes: 11
  },
];
const reducer = (accumulator, currentValue) => accumulator + parseInt(currentValue.votes);

const totalVotes = choiseArray.reduce(reducer, 0);

console.log("Total Votes: " + totalVotes);

关于javascript - reduce() 方法从对象数组中返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51755828/

相关文章:

Javascript.bind - ES5 与 ES6

javascript - 如何将 2 个数组组合成 1 个对象 javascript

javascript - 使用javascript减少数组

JavaScript 计时器线程

javascript - Ember CLI 将 ES6 文件导入 ember-cli-builds.js

javascript - Leaflet - 覆盖点击事件的图层

hadoop - reducer 未在hadoop中执行

javascript - 单个 promise 之后的 promise 循环

javascript - Jquery 1.9.1 权限被拒绝

javascript - JS - 对于字符串中具有特定 URL 的每个 anchor 链接,将 anchor 链接替换为其文本