3 回答

TA貢獻1773條經驗 獲得超3個贊
您可以簡單地使用Object.entries()和Array.reduce(),
主要思想是遍歷兩個數組并維護一個映射。
迭代第一個對象并創建其所有屬性的映射。
然后迭代第二個對象,并檢查它的每個屬性是否存在于地圖中,如果存在則合并兩者,如果不存在則簡單地添加它。
var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } }
var b = { "xyz": { "333": { name: "mary" } } };
let result = Object.entries(a).reduce((acc,[key, value]) => (acc[key] = value,acc),{});
Object.entries(b).reduce((acc,[key, value]) => (acc[key] =acc[key] && Object.assign(acc[key], value)|| value,acc),result);
console.log(result);
如果您可以使用現有對象之一,那么簡單的解決方案可以是:
var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } }
var b = { "xyz": { "333": { name: "mary" } } };
Object.entries(a).forEach(([key, value])=>{
b[key] = Object.assign(b[key] || {}, value);
});
console.log(b);

TA貢獻1831條經驗 獲得超9個贊
如果您已經在項目中使用 jQuery 或 Lodash,則可以分別使用$.extend或_.merge。當您已經在使用這些庫之一時,無需重新發明輪子。
var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } };
var b = { "xyz": { "333": { name: "mary" } } };
console.log($.extend(true, {}, a, b));
console.log(_.merge({}, a, b));
console.log("a =", a);
console.log("b =", b);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

TA貢獻1836條經驗 獲得超5個贊
你能使用es6對象解構嗎?
var a = {
"abc": {
"111": {
name: "jon"
}
},
"xyz": {
"222": {
name: "bill"
}
}
}
var b = {
"xyz": {
"333": {
name: "mary"
}
}
}
const c = {abc: a.abc, xyz: [a.xyz, b.xyz]};
console.log(c);
添加回答
舉報