在Javascript中,如何有条件地更新对象的属性?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Javascript中,如何有条件地更新对象的属性?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3119字,纯文字阅读大概需要5分钟。
内容图文
![在Javascript中,如何有条件地更新对象的属性?](/upload/InfoBanner/zyjiaocheng/747/b47284c229fb42a6be5990e856f8775e.jpg)
我已经看过this post并且想知道是否有一种方法可以使用javascript来编写一个函数,该函数可以通过使用具有新值的另一个对象来有条件地更新对象的所有属性?
说我有这个对象:
let oldObj = {test1: 'valueTest1',test2: 'valueTest2',test3: 'valueTest3' };
我想使用另一个对象传递的属性更新其值,如下所示:
let newObj = {test2: 'newValue2'}
在这种情况下,我只想更新属性“test2”.如果我知道我要更新的属性并且我事先知道原始属性,我将使用:
oldObj = {
...(newObj.test1) && {test1: newObj.test1} || {test1: oldObj.test1},
...(newObj.test2) && {test2: newObj.test2} || {test2: oldObj.test2},
...(newObj.test3) && {test3: newObj.test3} || {test3: oldObj.test3},
};
意思是我只会在属性进入新对象时更新值,但当然我必须添加与对象中的属性一样多的条件.
这种方法很好,但它没有推广,所以如果对象有10个属性,我将不得不写出10个条件.
有没有办法编写一个可以有条件地更新属性的函数,这样我就不必编写10个(或更多)条件?
解决方法:
你在评论中说过:
I will only update properties that exist in the old object, new properties that don’t exist in the old object will not be added.
这意味着我们必须将spread语法和Object.assign保留在图片之外,因为它们都会将newObj中的所有属性复制到oldObj.
相反,我们可以使用一个简单的循环(如果这出现了很多,你可以创建一个函数,也许是updateObject):
for (const key of Object.keys(newObj)) {
if (key in oldObj) {
oldObj[key] = newObj[key];
}
}
let oldObj = {test1: 'valueTest1',test2: 'valueTest2',test3: 'valueTest3' };
let newObj = {test2: 'newValue2', xyz: "don't copy me"};
for (const key of Object.keys(newObj)) {
if (key in oldObj) {
oldObj[key] = newObj[key];
}
}
console.log(oldObj);
(您可能更喜欢oldObj.hasOwnProperty(key)而不是oldObj中的键,具体取决于您的更新规则.)
或者使用相对较新的Object.entries和一些解构:
for (const [key, value] of Object.entries(newObj)) {
if (key in oldObj) {
oldObj[key] = value;
}
}
let oldObj = {test1: 'valueTest1',test2: 'valueTest2',test3: 'valueTest3' };
let newObj = {test2: 'newValue2', xyz: "don't copy me"};
for (const [key, value] of Object.entries(newObj)) {
if (key in oldObj) {
oldObj[key] = value;
}
}
console.log(oldObj);
在上面引用的澄清之前,我发布了以下关于spread和Object.assign的内容.只是为了完整性,但它们不适用于您想要跳过oldObj没有的属性的情况:
你不必像传播语法一样复杂,只需:
oldObj = {...oldObj, ...newObj};
let oldObj = {test1: 'valueTest1',test2: 'valueTest2',test3: 'valueTest3' };
let newObj = {test2: 'newValue2', xyz: "I get copied too"};
oldObj = {...oldObj, ...newObj};
console.log(oldObj);
这将创建一个包含所有oldObj和newObj属性的新对象,如果两者具有相同的名称,则newObj的属性将获胜.
请注意,物业价差是全新的,只是批准到第4阶段(将在ES2018规范中).如果您不想使用Stage 4提案,请使用Object.assign:
oldObj = Object.assign({}, oldObj, newObj);
let oldObj = {test1: 'valueTest1',test2: 'valueTest2',test3: 'valueTest3' };
let newObj = {test2: 'newValue2', xyz: "I get copied too"};
oldObj = Object.assign({}, oldObj, newObj);
console.log(oldObj);
如果要在原位更新oldObj而不是创建新对象,也可以使用Object.assign:
Object.assign(oldObj, newObj);
let oldObj = {test1: 'valueTest1',test2: 'valueTest2',test3: 'valueTest3' };
let newObj = {test2: 'newValue2', xyz: "I get copied too"};
Object.assign(oldObj, newObj);
console.log(oldObj);
内容总结
以上是互联网集市为您收集整理的在Javascript中,如何有条件地更新对象的属性?全部内容,希望文章能够帮你解决在Javascript中,如何有条件地更新对象的属性?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。