获取对象数组中每个用户的喜欢总数-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})})
现在我需要找到不同的用户名并将它们相加,但这就是我遇到的问题。谢谢。萨贾德。这是如何解决这个问题的一个很好的解释。