getTotalUserVotes = (userid) => {
let posts = this.state.posts.slice();
let current = posts.filter((item) => {
return item.userid === userid;
})
console.log(current);
const tot = current.map((item) => {
return item.votes;
})
console.log("tot is " + tot)
// this logs 50, 0 ,0
//so each of the three posts that belong to that user have those amount
//of votes respectively.How can I add these?
return <div>votes: {tot}</div>;
}
当我尝试使用for循环添加这些时,字符串连接得很好得到5000,我已经搜索了如何在堆栈溢出时停止它,但没有一个答案与我的情况有任何关系。 somewhat related question
帖子中的数据示例是 here
答案 0 :(得分:1)
您可以使用reduce方法代替map来添加每个项目的投票。
const tot = current.reduce((total, item) => total + Number(item.votes), 0);
但是,您实际上可以一次过滤,映射和减少所有内容。
const getTotalUserVotes = (userid) => {
const tot = this.state.posts.reduce((total, post) => {
return post.userid === userid ? total + Number(post.votes) : total
}, 0)
return <div>votes: {tot}</div>;
}
答案 1 :(得分:0)
您可以将item.votes
转换为数字(因为它听起来像是存储为字符串),然后使用for循环或reduce()
对值进行求和:
const tot = current.map((item) => {
return Number(item.votes);
})
tot = tot.reduce((a,b)=>a+b,0)