繁体   English   中英

如何在具有特定不同值对的对象数组中找到值的总和?

[英]How find sum of values in array of objects with specific distinct value pair?

我想在具有特定用户的对象数组中查找值的总和,并为特定用户创建具有总值的不同对象数组。

这是我拥有的对象数组。

var userData = [
  {name: "user1", amount: 80},
  {name: "user1", amount: 12},
  {name: "user1", amount: 8},
  {name: "user2", amount: 60},
  {name: "user2", amount: 12},
  {name: "user3", amount: 90},
  {name: "user3", amount: 28}
]

我需要的输出。

UserGrandTotal = [
  {name: "user1", totalamount: 100},
  {name: "user2", totalamount: 72},
  {name: "user3", totalamount: 118}  
]

您可以通过传递一个callback提供的函数来使用reduce方法,该函数应用于数组中的每个项目。

我使用reduce创建了一个hash结构,其中我将每个唯一name存储为散列key ,作为散列值,我们有user详细信息以及该指定useramount

由于算法的复杂性,我们有O(N)因为我们只迭代整个数组一次。

 var userData = [ {name: "user1", amount: 80}, {name: "user1", amount: 12}, {name: "user1", amount: 8}, {name: "user2", amount: 60}, {name: "user2", amount: 12}, {name: "user3", amount: 90}, {name: "user3", amount: 28} ]; var result = Object.values(userData.reduce((hash, item) => { if (!hash[item.name]) { hash[item.name] = { name: item.name, amount: 0 }; } hash[item.name].amount += item.amount; return hash; }, {})); console.log(result);

使用forEachfind给出替代答案:

 var userData = [ {name: "user1", amount: 80}, {name: "user1", amount: 12}, {name: "user1", amount: 8}, {name: "user2", amount: 60}, {name: "user2", amount: 12}, {name: "user3", amount: 90}, {name: "user3", amount: 28} ] let userGrandTotal = []; userData.forEach(user => { let grandUser = userGrandTotal.find(userGrand => userGrand.name === user.name); if(grandUser) { grandUser.amount += user.amount; } else { userGrandTotal.push(user) } }) console.log(userGrandTotal)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM