2017-03-02 43 views
-3

我有这个数组输入:基于2个键在数组中聚合/连接JavaScript对象?

[ 
{ 
    a:1 
    b:1 
    c: 100 
}, 
{ 
    a:1 
    b:1 
    : 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来结合基于一个键的多个对象是完全相同的,但它不适用于这个目的。我会怎么做?

+0

一个键来执行它的工作,只是通过改变它比较关键看两个属性,而不只是一个... –

+0

HTTPS的部分代码:// repl.it/GFQ5 –

回答

0

您可以创建一个对象来存储key-value对要分组对象的特定属性,然后使用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 result = data.reduce(function(r, e) { 
 
    var key = 'a'+e.a+'|b'+e.b; 
 
    if(!hash[key]) hash[key] = e, r.push(hash[key]) 
 
    else hash[key].c += e.c 
 
    return r 
 
}, []) 
 

 
console.log(JSON.stringify(result, 0, 4))