gpt4 book ai didi

内部部分属性的javascript条件更新而不删除其他属性

转载 作者:行者123 更新时间:2023-11-30 14:25:00 24 4
gpt4 key购买 nike

我问了this question以前,但我现在面临一个不同的问题。

我有这些对象:

let oldObj = { 
test1: 'valueTest1',
test2: {
inner1: 'valueInner1',
inner2: 'valueInner2',
inner3: {
otherInner1: 'valueOtherInner1',
otherInner2: 'valueOtherInner2'
}
},
test3: 'valueTest3'
};

let newObj = {
test2: {
inner1: 'newValueInner1',
}
}

并使用此代码:

for (const key of Object.keys(newObj)) {
if (key in oldObj) {
oldObj[key] = newObj[key];
}
}

我得到:

{
test1:'valueTest1',
test2: {
inner1: 'newValueInner1'
},
test3:'valueTest3'
}

但我不想删除内部对象的其他属性(inner2、inner3 等)。我希望得到这样的结果:

{ 
test1: 'valueTest1',
test2: {
inner1: 'newValueInner1',
inner2: 'valueInner2',
inner3: {
otherInner1: 'valueOtherInner1',
otherInner2: 'valueOtherInner2'
}
},
test3: 'valueTest3'
}

有没有一种方法可以实现这个功能?

这里的对象只是例子,我想要实现的是创建一个深度修改对象属性而不删除其余部分的函数。

例如,如果我将 newObj 定义为:

let newObj = {
test2: {
inner3: {
otherInner1:'newValueInner1'
}
}
}

我应该得到:

{ 
test1: 'valueTest1',
test2: {
inner1: 'valueInner1',
inner2: 'valueInner2',
inner3: {
otherInner1: 'newValueInner1',
otherInner2: 'valueOtherInner2'
}
},
test3: 'valueTest3'
};

最佳答案

您需要迭代对象条目,如果找到另一个对象,则获取嵌套对象进行更新。

function update(target, source) {
Object.entries(source).forEach(([key, value]) => {
if (value && typeof value === 'object') {
update(target[key] = target[key] || {}, value);
return;
}
target[key] = value;
});
}

var oldObj = { test1: 'valueTest1', test2: { inner1: 'valueInner1', inner2: 'valueInner2', inner3: { otherInner1: 'valueOtherInner1', otherInner2: 'valueOtherInner2' } }, test3: 'valueTest3' },
newObj = { test2: { inner1: '!!!!!!!!!!!!' } };

update(oldObj, newObj);
console.log(oldObj);

关于内部部分属性的javascript条件更新而不删除其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52085299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com