[英]Get total number of likes for each user in an array of objects - JavaScript
So I'm stuck with a logical problem.所以我遇到了一个逻辑问题。 I'm trying to figure out a way of getting total number of likes for each user in an array of objects.
我试图找出一种方法来获取对象数组中每个用户的喜欢总数。 Here is my Sample array.
这是我的示例数组。
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",
}]
My goal is to have a final list of of distinct username with their total likes like the one bellow.我的目标是有一个不同用户名的最终列表,他们的总喜欢如下一个。
const userLikes = [
{
username: 'mikealice',
totalLikes: 5
},
{
username: 'admin',
totalLikes: 4
}
]
Help me figure out the logic to solving this problem.帮我找出解决这个问题的逻辑。 Thanks.
谢谢。
obj
obj
array
array
obj
has already a key same as the current username
obj
是否已经有一个与当前username
相同的键username
, value would be another object
containing username
and totalLikes
username
,值将是另一个包含username
和totalLikes
object
username
, increase the value of totalLikes
with current likes
username
相同的键, totalLikes
使用当前likes
增加totalLikes
的值dictionary
/ object
formdictionary
/ object
形式Object.values
will bring out the desired array
Object.values
将带出所需的array
Code -代码 -
let obj = {} articles.forEach((article, index) => { let { username, likes } = article if (!obj[username]) { obj[username] = { username, totalLikes: likes } } else { let { totalLikes } = obj[username] obj[username].totalLikes = totalLikes + likes } }) let finalArray = Object.values(obj)
Using reduce
and Object.values
will simplify.使用
reduce
和Object.values
会简化。
const getTotalLikes = arr => Object.values( arr.reduce((acc, { username, likes }) => { acc[username] = username in acc ? { username, totalLikes: acc[username].totalLikes + likes } : { username, totalLikes: likes }; return acc; }, {}) ); 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" } ]; console.log(getTotalLikes(articles));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.