Javascript覆盖某些对象键

Javascript覆盖某些对象键,javascript,object,Javascript,Object,例如,我有一个对象 let header = { "navbar": { "buttons": { 0: { "content": "home", "color": "blue", "href": "home" }, 1: {

例如,我有一个对象

let header = {
        "navbar": {
            "buttons": {
                0: {
                    "content": "home",
                    "color": "blue",
                    "href": "home"
                },
                1: {
                    "content": "shop",
                    "color": "red",
                    "href": "shop"
                },
                2: {
                    "content": "contact",
                    "color": "gold",
                    "href": "contact"
                }
            }
        }
    };
我还有第二个目标:

let header = {
        "navbar": {
            "buttons": {
                0: {
                    "content": "work",
                },
                2: {
                    "color": "blue",
                    "href": "test"
                }
            }
        }
    };
现在我想更新存在于第二个对象中的第一个对象键。所以对象看起来像这样:

let header = {
        "navbar": {
            "buttons": {
                0: {
                    "content": "work",
                    "color": "blue",
                    "href": "home"
                },
                1: {
                    "content": "shop",
                    "color": "red",
                    "href": "shop"
                },
                2: {
                    "content": "contact",
                    "color": "blue",
                    "href": "test"
                }
            }
        }
    };
解决这个问题最简单的方法是什么? 提前感谢,, 贾里

const header1={
导航栏:{
按钮:{
0: {
内容:“主页”,
颜色:“蓝色”,
href:“主页”,
},
1: {
内容:“店铺”,
颜色:“红色”,
href:“商店”,
},
2: {
内容:“联系人”,
颜色:“金色”,
href:“联系人”,
},
},
},
};
常数头2={
导航栏:{
按钮:{
0: {
内容:“工作”,
},
2: {
颜色:“蓝色”,
href:“测试”,
},
},
},
};
常数头={
导航栏:{
按钮:{},
},
};
//只有给了钥匙才是续集
const header1Keys=Object.key(header1.navbar.buttons)
const header2Keys=Object.keys(header2.navbar.buttons)
常量键=header1Keys.length>header2Keys.length?头1眼:头2眼;
for(键的常数键){
header.navbar.buttons[key]={…header1.navbar.buttons[key],…header2.navbar.buttons[key]}
}

log(header)
您可以通过不同的方式实现这一点,一种方法是为每个按钮循环并将其与合并

下面是一个粗略的示例,objectA中的键将被保留并更新(合并)为objectB中相应键的值(将添加新键的字母):

//初始值。
var objectA={
0: {
答:“A0”,
b:“B0”,
c:“C0”
},
1: {
a:“A1”,
c:“C1”,
d:“D1”
},
2: {
b:“B2”
},
3: {
d:“D3”,
e:“E3”,
f:“F3”
},
};
//更新值。
var objectB={
1: {
答:“A1(更新)”,
b:“B1(新增)”,
c:“C1(更新版)”
},
2: {
a:“A2(增补)”,
b:“B2(更新)”,
c:“C2(新增)”
},
3: {
a:“A3”,
c:“C3”,
d:“D3(更新版)”
},
10: {
z:“Z10”
},
11: {
y:“Y11”
},
};
/**
*用另一个对象的值更新一个对象的值。
*/
函数更新对象值(obj1、obj2){
用于(obj1中的var键){
//跳过obj2中不在obj1中的键。
如果(!obj2.hasOwnProperty(key))继续;
//将obj1中的关键对象更新(合并)为obj2。
obj1[key]=对象.赋值(obj1[key],obj2[key]);
}
}
更新对象值(objectA、objectB);

console.info(objectA)到目前为止您尝试的代码是什么?只是在每个键上循环并检查它是否存在,但这需要针对每个对象进行修改,因此我需要一个一次性函数…@JarivanDevorde此代码无法确保您保留header1的所有值。例如,如果你有header1:
{0,1,2,3}
,和header2:
{0,3,4,5,6}
(必须更大),你将失去
1
2
,而不是
{0,1,2,3,4,6}
。这是因为行:
const keys=header1Keys.length>header2Keys.length?头1眼:头2眼。除非您只想保留最大标头中的键,否则此代码将返回意外的结果。对于双层对象,我需要这样的结果,因此具有键的对象具有自己的键,如:nevermind,jquery的extend()函数非常适合于此