[英]Find if a specific pair of values exist in an array of named objects in localStorage with JS
[英]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
详细信息以及该指定user
总amount
。
由于算法的复杂性,我们有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);
使用forEach
和find
给出替代答案:
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.