2016-05-31 44 views
1

我有一些阵:如何通过相同的值和某些属性来联合/组合对象数组?

[ 
 
    { 
 
    billable: 1, 
 
    source: "Facebook", 
 
    providerAccountId: 5, 
 
    message_id: "5bb1a457" 
 
    }, 
 
    { 
 
    billable: 1, 
 
    source: "Facebook", 
 
    providerAccountId: 5, 
 
    message_id: "6bb3G465" 
 
    }, 
 
    { 
 
    destination: "8801856472841" 
 
    message_id: "5bb1a457" 
 
    } 
 
] 
 

 
//after union, i need to get result: 
 
    
 
[ 
 
    { 
 
    billable: 1, 
 
    source: "Facebook", 
 
    providerAccountId: 5, 
 
    message_id: "5bb1a457" 
 
    destination: "8801856472841" 
 
    }, 
 
    { 
 
    billable: 1, 
 
    source: "Facebook", 
 
    providerAccountId: 5, 
 
    message_id: "6bb3G465" 
 
    } 
 
]

请帮助,myabe是它用独特的价值属性possable到组或工会。只是将所有具有相同值的对象按指定属性和缺少属性添加到连接对象中

+0

你尝试过什么?另外,你的数组中有语法错误:'第28行,第5列' – gfullam

+0

'_.groupBy(arr,'billable')'不帮助你? –

+0

@gfullam,我没有尝试,我只铺了代码 – axon

回答

1

您可以通过您要检查,最终的关键映射它进行合并:

var d = [ 
 
    { 
 
    billable: 1, 
 
    source: "Facebook", 
 
    providerAccountId: 5, 
 
    message_id: "5bb1a457" 
 
    }, 
 
    { 
 
    billable: 1, 
 
    source: "Facebook", 
 
    providerAccountId: 5, 
 
    message_id: "6bb3G465" 
 
    }, 
 
    { 
 
    destination: "8801856472841", 
 
    message_id: "5bb1a457" 
 
    } 
 
]; 
 

 
var res = d.reduce((ac,x) => { 
 
    if (ac[x.message_id]) 
 
    Object.assign(ac[x.message_id],x); //if you want to preserve original use a new object as target 
 
    else 
 
    ac[x.message_id]=x; 
 
    return ac; 
 
},{}) 
 

 
// and then you can map it back to array 
 
var res2 = Object.keys(res).map(x => res[x]) 
 

 
console.log(res) 
 
console.log(res2)

1

您可以遍历数组并过滤它,同时应用已插入对象的属性。

此提议使用(真的)空对象作为散列表,用于对被过滤对象的引用。如果存在具有相同message_id的对象,则将实际对象的所有属性分配给具有散列的对象。

var array = [{ billable: 1, source: "Facebook", providerAccountId: 5, message_id: "5bb1a457" }, { billable: 1, source: "Facebook", providerAccountId: 5, message_id: "6bb3G465" }, { destination: "8801856472841", message_id: "5bb1a457" }]; 
 

 
array = array.filter(function (a) { 
 
    if (!this[a.message_id]) { 
 
     this[a.message_id] = a; 
 
     return true; 
 
    } 
 
    Object.keys(a).forEach(function (k) { 
 
     this[k] = a[k]; 
 
    }, this[a.message_id]); 
 
}, Object.create(null)); 
 

 
console.log(array);

相关问题