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()函数非常适合于此