![](/img/trans.png)
[英]How to merge objects in a subArray such that there is one array left with multiple objects in javascript
[英]How to merge multiple objects into one?
我正在尋找一種將具有相同鍵的許多對象合並到一個大對象的方法。 對象數可以大於2。
例如,我有以下代碼:
const a = {
en: {
hello: 'Hello'
},
fr: {
hello: 'Bonjour'
}
}
const b = {
en: {
goodbye: 'Goodbye'
},
fr: {
goodbye: 'Au revoir'
}
}
如何將其合並為:
{
locale: 'en',
messages: {
en: {
hello: 'Hello',
goodbye: 'Goodbye'
},
fr: {
hello: 'Bonjour',
goodbye: 'Au revoir'
}
}
}
您可以對對象的每個級別使用深度合並功能。
函數deepMerge
可以作為給定目標的單個函數,也可以作為Array#reduce
回調函數,其中迭代對象數組,並提供一個空對象作為減少的startvalue
。
結果,您需要一個新對象,並將合並對象分配為新屬性messages
。
function deepMerge(target, source) { Object.entries(source).forEach(([key, value]) => { if (value && typeof value === 'object') { deepMerge(target[key] = target[key] || {}, value); return; } target[key] = value; }); return target; } var a = { en: { hello: 'Hello' }, fr: { hello: 'Bonjour' } }, b = { en: { goodbye: 'Goodbye' }, fr: { goodbye: 'Au revoir' } }, c = { locale: 'en', messages: [a, b].reduce(deepMerge, {}) }; console.log(c);
.as-console-wrapper { max-height: 100% !important; top: 0; }
函數mergeArray用於數組合並
const mergeArray = (firstArray, secondArray) => {
return {
locale: 'en',
messages: {
en: {
...firstArray.en,
...secondArray.en
},
fr: {
...firstArray.fr,
...secondArray.fr
}
}
}
};
console.log(mergeArray(a, b));
下面的代碼片段為您提供了預期的輸出。
const value = { locale: 'en', messages: { en: { ...a.en, ...b.en }, fr: { ...a.fr, ...b.fr } }};
console.log(value)
如果希望將其用於新對象,則可以使用Object.Assign({},a,b)
請閱讀以下內容: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
當對象數是動態的時,請嘗試以下操作:
var o, k, v, n, A=[a,b], r={}
for(o in A) for(k in A[o]) if(!r[k]) r[k]={};
for(o in A) for(v in A[o]) for(n in A[o][v]) if(!r[v][n]) r[v][n]= A[o][v][n];
console.log(r);
console.log({locale: 'en',messages:r});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.