2016-07-07 83 views
0

我有一個對象數組arr,我想將數組中的所有對象合併爲一個。對象中還有重複的鍵。有什麼辦法可以做到這一點?任何幫助都會很棒。將數組中的所有對象合併爲一個

var arr = [{ a: 1, a: 2 }, 
{ c: 1, d: 2 }, 
{ e: 14, f: 20 }]; 

我想輸出是:

var arr = [{ a: 1, 
      a1: 2, 
      c: 1, 
      d: 2, 
      e: 14, 
      f: 20 }]; 
+0

2分鐘解決方案:https://jsfiddle.net/osp5fawq/ – chf

+0

你的意思是你的輸出應該有'a','b',而不是'a'和'a',對嗎? – KevBot

+0

我有多個相同的密鑰,並且如果重複的話想重命名它們。 –

回答

2

假設所有的按鍵都是獨一無二的,你不想檢查,使用reduce

var combinedKeys = arr.reduce(function(a, item) { 
    Object.keys(item).map(function(key) { 
     a[key] = item[key]; 
    }); 

    return a; 
}, {}); 

var singleArrayOfCombinedKeys = [combinedKeys]; //[Object a: 1b: 2c: 1d: 2e: 14f: 20__proto__: Object] 
+0

這是一個很好的答案,所以如果我確實有不唯一的鍵,但仍然希望它們包括在內,我將如何處理這個問題。 –

+0

@JacobBrauchler - 取決於你想要的結果 - 你想把數字加起來嗎? – tymeJV

+0

不,我不想總結他們我希望對象看起來像我的問題的輸出,我只是用數字作爲例子。 –

2

你可以通過簡單的迭代使用for循環的數組並將每個項目的所有屬性分配給組合對象:

var arr = [{ a: 1, b: 2 }, 
 
{ c: 1, d: 2 }, 
 
{ e: 14, f: 20 }]; 
 

 
var combinedObj = {}; 
 

 
for(var i = 0; i < arr.length; i++) 
 
{ 
 
    var item = arr[i]; 
 
    for(var key in item) 
 
    { 
 
    combinedObj[key] = item[key]; 
 
    }//for() 
 
}//for 
 

 
console.log(combinedObj);

2

你可以使用reduce()Object.assign()

var arr = [{ a: 1, b: 2 }, { c: 1, d: 2 }, { e: 14, f: 20 }]; 
 

 
var result = [arr.reduce((r, o) => Object.assign(r, o), {})]; 
 
console.log(result)

相關問題