我想使用 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/