簡體   English   中英

獲取對象數組中每個用戶的點贊總數 - JavaScript

[英]Get total number of likes for each user in an array of objects - JavaScript

所以我遇到了一個邏輯問題。 我試圖找出一種方法來獲取對象數組中每個用戶的喜歡總數。 這是我的示例數組。

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
  }
]

幫我找出解決這個問題的邏輯。 謝謝。

  1. 拿一個空物體,說obj
  2. 循環遍歷你的array
  3. 在每個循環中,檢查obj是否已經有一個與當前username相同的鍵
  4. 如果沒有,則創建一個鍵值對,鍵將是username ,值將是另一個包含usernametotalLikes object
  5. 如果已經有一個與username相同的鍵, totalLikes使用當前likes增加totalLikes的值
  6. 循環完成后,您將得到答案,但以dictionary / object形式
  7. Object.values將帶出所需的array

代碼 -

 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)

使用reduceObject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM