如何添加从map函数返回的项目

时间:2018-01-01 02:35:55

标签: reactjs

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

2 个答案:

答案 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)