我有一個對象數組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 }];
我有一個對象數組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 }];
假設所有的按鍵都是獨一無二的,你不想檢查,使用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]
這是一個很好的答案,所以如果我確實有不唯一的鍵,但仍然希望它們包括在內,我將如何處理這個問題。 –
@JacobBrauchler - 取決於你想要的結果 - 你想把數字加起來嗎? – tymeJV
不,我不想總結他們我希望對象看起來像我的問題的輸出,我只是用數字作爲例子。 –
你可以通過簡單的迭代使用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);
你可以使用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)
2分鐘解決方案:https://jsfiddle.net/osp5fawq/ – chf
你的意思是你的輸出應該有'a','b',而不是'a'和'a',對嗎? – KevBot
我有多個相同的密鑰,並且如果重複的話想重命名它們。 –