基于2个键聚合/连接数组中的JavaScript对象?

基于2个键聚合/连接数组中的JavaScript对象?,javascript,arrays,concatenation,Javascript,Arrays,Concatenation,我有以下数组输入: [ { a:1 b:1 c: 100 }, { a:1 b:1 c: 150 }, { a:1 b:2 c: 100 }, { a:2 b:1 c:13 } ] 我想要这样的数组结果: [ { a:1 b:1 c: 250 }, { a:1 b:2 c: 100 }, { a:2 b:1 c:13 }

我有以下数组输入:

[
{
    a:1
    b:1
    c: 100
},
{
    a:1
    b:1 
    c: 150
},
{
    a:1
    b:2
    c: 100
},
{
    a:2
    b:1
    c:13
}
]
我想要这样的数组结果:

[
{
    a:1
    b:1
    c: 250  
},

{
    a:1
    b:2
    c: 100
},
{
    a:2
    b:1
    c:13
}
]

我的想法是,当且仅当至少两个特定关键点完全相同时,通过将两个对象相加来组合两个对象。我知道这个网站上有代码可以使用Javascript根据一个完全相同的键组合多个对象,但它不能用于此目的。如何操作?

您可以创建一个对象来存储要按其对对象进行分组的特定属性对
键值,然后使用
reduce()
返回对象作为结果

var data=[{“a”:1,“b”:1,“c”:100},{“a”:1,“b”:1,“c”:150},{“a”:1,“b”:2,“c”:100},{“a”:2,“b”:1,“c”:13}]
var hash={}
var结果=数据.reduce(函数(r,e){
变量键='a'+e.a+'|b'+e.b;
如果(!hash[key])hash[key]=e,r.push(hash[key])
else散列[key].c+=e.c
返回r
}, [])

log(JSON.stringify(result,0,4))
使用一个键执行此操作的代码可以工作,只需将比较键的部分更改为查看两个属性而不是一个属性即可。。。