Javascript 通过添加数组中具有相同id的对象的数值属性来合并这些对象

Javascript 通过添加数组中具有相同id的对象的数值属性来合并这些对象,javascript,Javascript,我已经在谷歌上搜索了一个教程,但找不到我需要的。 我有这样一个数组: [ {Username:'user1', Balance:'123'}, {Username:'user2', Balance:'213'}, {Username:'user1', Balance:'424'} ] 当用户名相同时,如何合并余额,例如合并余额用户名:'user1'您可以使用更高级的内置函数组合,如Object.keys,Array#reduce,和Array#map在某些属性匹配时有条件地组合数组项

我已经在谷歌上搜索了一个教程,但找不到我需要的。 我有这样一个数组:

[
 {Username:'user1', Balance:'123'}, 
 {Username:'user2', Balance:'213'}, 
 {Username:'user1', Balance:'424'}
]

用户名
相同时,如何合并
余额
,例如合并余额用户名:'user1'您可以使用更高级的内置函数组合,如
Object.keys
Array#reduce
,和
Array#map
在某些属性匹配时有条件地组合数组项

var数组=[{
用户名:“user1”,
余额:“123”
}, {
用户名:“user2”,
余额:'213'
}, {
用户名:“user1”,
余额:'424'
}]
var map=array.reduce(函数(map,e){
map[e.Username]=+e.Balance+(map[e.Username]| 0)
返回图
}, {})
var result=Object.keys(map).map(函数(k){
返回{Username:k,Balance:map[k]}
})

console.log(result)
您可以使用带有哈希表的单个循环来引用具有相同
用户名的对象

var data=[{Username:'user1',Balance:'123'},{Username:'user2',Balance:'213'},{Username:'user1',Balance:'424'}],
分组=[];
data.forEach(函数(散列){
返回函数(o){
如果(!散列[o.Username]){
哈希[o.Username]={用户名:o.Username,余额:0};
push(hash[o.Username]);
}
散列[o.Username].Balance+=+o.Balance;
};
}(Object.create(null));

控制台日志(分组)这里还有一个解决方案,我发现它没有gyre的那么神奇(但我对他的也很感兴趣)

函数合并平衡(x){
var用户=[];
用户=x.filter(函数(条目){
if(users[entry.Username]){return false;}
用户[entry.Username]=entry.Username;
返回true;
})
.map(函数(e){返回e.Username;});
余额={};
对于(var i=0;i控制台日志(合并余额(x))
,这比逻辑OR有什么优势?我试图避免编写
映射[e.Username]
再来一次,但我想我现在看到了将这两项作业结合起来的方法。请给我一点时间编辑:)@gyre如何进行多次求和?示例:
var数组=[{Username:'user1',Balance:'123',另一个:'222'},{Username:'user2',Balance:'213',另一个:'111'},{Username:'user1',Balance:'424',另一个:'121'}]
我相信这就是我在示例代码中使用的数组。你有关于它的问题吗?@gyre它对sum
balance
有效,如果另一个数字要求和,我必须在你的代码中添加什么代码示例
'x'是未定义的
。x是你的数组,例如,x=[{用户名:'user1',balance:'123'},{用户名:'user2',balance:'213'},{用户名:'user1',balance:'424'}]请添加该数组,以免混淆。(我通常会放弃有错误的答案。)当然。准备就绪。