gpt4 book ai didi

javascript - 如果找到,则使用不同的值更新嵌套属性,否则添加它

转载 作者:行者123 更新时间:2023-11-28 09:02:32 25 4
gpt4 key购买 nike

假设我有一个如下所示的目标对象:

{
"info": {
"name": "Tito",
"email": "tito@foo.com",
"company": "FOOBAR INC."
}
}

我想使用以下对象修补/更新上面的目标对象:

{
"info": {
"email": "tito@foobar.com",
"company": "Foobar Inc.",
"state": "CA"
}
}

因此结束如下:

{
"info": {
"name": "Tito",
"email": "tito@foobar.com",
"company": "Foobar Inc.",
"state": "CA"
}
}

最简单的方法是什么,如果找到则更新,如果未找到则添加(考虑到属性可能是嵌套的)。有没有简单的方法可以做到这一点?

到目前为止,我已尝试以下操作,但仅适用于第一级属性:

module.exports.mergeObjects = function (obj1, obj2) {
var obj3 = {};
for (var attrname1 in obj1) {
if (obj1.hasOwnProperty(attrname1)) {
obj3[attrname1] = obj1[attrname1];
}
}
for (var attrname2 in obj2) {
if (obj2.hasOwnProperty(attrname2)) {
obj3[attrname2] = obj2[attrname2];
}
}
return obj3;
};

我需要进行深度遍历。在 Obj-C 中,我会立即做到这一点,但作为 JS 的新手,我不确定我是否尝试做太多事情。

谢谢!

最佳答案

如果您可以定义这些对象可能要比较的所有可能的属性,那么您可以将其放入一个类中(以及 javascript 近似值)。之后,您可以比较前面提到的原型(prototype),以测试它们是否是同一类型的对象,然后您可以定义一个比较函数,该函数将正确比较该类的任何两个对象。如果该类具有其他可定义类的成员,那么您可以为这些类编写比较函数并在上层比较函数中调用它们。这类似于更传统的面向对象方法。

要创建一个完全通用的方法,提到的继承链可能是一个很好的起点。 Object.create() 尤其可能会有所帮助。

这是一个关于面向对象的 javascript 的教程。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript对于 Object.create https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

关于javascript - 如果找到,则使用不同的值更新嵌套属性,否则添加它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17541139/

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