获取对象数组中每个用户的喜欢总数-JavaScript

获取对象数组中每个用户的喜欢总数-JavaScript,javascript,arrays,Javascript,Arrays,所以我遇到了一个逻辑问题。我试图找出一种方法,在一组对象中为每个用户获取喜欢的总数。这是我的示例数组 const articles = [{ authorId: "2vP3i2rYvDYPrikE1k1DTaZDeoq1", dislikes: 0, likes: 3, neutral: 0, text: "This is Mike Alice's first Shot!!", username: "mikealice", id: "NMFGbeTvSYddsr7Vz

所以我遇到了一个逻辑问题。我试图找出一种方法,在一组对象中为每个用户获取喜欢的总数。这是我的示例数组

const articles = [{
  authorId: "2vP3i2rYvDYPrikE1k1DTaZDeoq1",
  dislikes: 0,
  likes: 3,
  neutral: 0,
  text: "This is Mike Alice's first Shot!!",
  username: "mikealice",
  id: "NMFGbeTvSYddsr7VzjFV",
},
 {
  authorId: "2vP3i2rYvDYPrikE1k1DTaZDeoq1",
  dislikes: 0,
  likes: 2,
  neutral: 0,
  text: "This is Mike Alice's second Shot!!",
  username: "mikealice",
  id: "NMFGbeTvSYddsr7VzjFV",
},
 {
  authorId: "2vP3i2rYvDYPrikE1k1klkDTaZDeoq1",
  dislikes: 0,
  likes: 1,
  neutral: 0,
  text: "This is admin's first Shot!!",
  username: "admin",
  id: "NMFGbeTvSYddsr7VzjFV",
},
 {
  authorId: "2vP3i2rYvDYPrikE1k1klkDTaZDeoq1",
  dislikes: 0,
  likes: 3,
  neutral: 0,
  text: "This is admin's second Shot!!",
  username: "admin",
  id: "NMFGbeTvSYddsr7VzjFV",
}]
我的目标是要有一个不同用户名的最终列表,以及它们的总喜好,如下面的一个

const userLikes = [
  {
  username: 'mikealice',
  totalLikes: 5
  },
  {
  username: 'admin',
  totalLikes: 4
  }
]
帮我找出解决这个问题的逻辑。
谢谢。

使用
reduce
对象。值将简化

const getTotalLikes=arr=>
对象值(
arr.reduce((acc,{username,likes})=>{
acc[用户名]=
acc中的用户名
?{username,totalikes:acc[username].totalikes+likes}
:{用户名,totalikes:likes};
返回acc;
}, {})
);
常量项目=[
{
作者:“2VP3I2YVDYPRIKE1K1DTAZDEOQ1”,
不喜欢:0,
喜欢:3,
中立:0,,
文字:“这是迈克·爱丽丝的第一枪!!”,
用户名:“mikealice”,
id:“NMFGbeTvSYddsr7VzjFV”
},
{
作者:“2VP3I2YVDYPRIKE1K1DTAZDEOQ1”,
不喜欢:0,
喜欢:2,,
中立:0,,
文字:“这是迈克·爱丽丝的第二枪!!”,
用户名:“mikealice”,
id:“NMFGbeTvSYddsr7VzjFV”
},
{
作者:“2VP3I2RvDyPrike1K1KDTAZDEOQ1”,
不喜欢:0,
喜欢:1,,
中立:0,,
文字:“这是管理员的第一枪!!”,
用户名:“管理员”,
id:“NMFGbeTvSYddsr7VzjFV”
},
{
作者:“2VP3I2RvDyPrike1K1KDTAZDEOQ1”,
不喜欢:0,
喜欢:3,
中立:0,,
文字:“这是管理员的第二枪!!”,
用户名:“管理员”,
id:“NMFGbeTvSYddsr7VzjFV”
}
];
log(getTotalLikes(articles))
  • 拿一个空对象,比如说
    obj
  • 数组中循环
  • 在每个循环中,检查
    obj
    是否已经有一个与当前
    用户名相同的键
  • 如果没有,则创建一个键值对,键值将是
    用户名
    ,值将是另一个
    对象
    ,其中包含
    用户名
    总计
  • 如果已有与
    用户名
    相同的键,则使用当前的
    likes
    增加
    totalikes
    的值
  • 循环完成后,您将得到答案,但答案是以
    字典
    /
    对象
    形式出现的
  • 对象。值
    将显示所需的
    数组
  • 代码-

    让obj={}
    articles.forEach((文章,索引)=>{
    让{username,likes}=article
    如果(!obj[用户名]){
    obj[用户名]={
    用户名,
    喜欢
    }
    } 
    否则{
    设{totalikes}=obj[用户名]
    obj[username].totalikes=totalikes+likes
    }
    })
    
    让finalArray=Object.values(obj)
    您尝试过什么,它到底有什么问题?到目前为止,我还没有找到最简单的解决方法。我最初的想法是在数组中循环并创建另一个数组,其中每个对象都有一个用户名等。像这样的
    articles.forEach((article)=>{userArticles.push({username:article.username,likes:article.likes})})
    现在我需要找到不同的用户名并将它们相加,但这就是我遇到的问题。谢谢。萨贾德。这是如何解决这个问题的一个很好的解释。