基于另一个对象更新JSON格式的JavaScript对象
具有两个JSON格式的js对象:基于另一个对象更新JSON格式的JavaScript对象,javascript,jquery,json,angularjs,Javascript,Jquery,Json,Angularjs,具有两个JSON格式的js对象: obj1 = { prop1: 1, prop2: 2, prop3: 3 } obj2 = { prop1: 1, prop2: 3 } 将obj2更新为obj1的最佳做法是什么,这也会删除属性?通常在jQuery/angular上下文中。导致: obj1 = { prop1: 1, // not updated, nor overwritten prop2: 3 // up
obj1 = { prop1: 1,
prop2: 2,
prop3: 3 }
obj2 = { prop1: 1,
prop2: 3 }
将obj2更新为obj1的最佳做法是什么,这也会删除属性?通常在jQuery/angular上下文中。导致:
obj1 = { prop1: 1, // not updated, nor overwritten
prop2: 3 // updated
} // prop3 removed
还必须处理嵌套对象和数组。比较可以使用的对象(obj1、obj2)。 对于合并,您可以进行检查,但不会删除缺少的元素。尝试以下操作:
function merge_objects(obj1,obj2){
for (var attr in obj2) { obj1[attr] = obj2[attr]; }
for (var attr in obj1) { if(!obj2[attr]){ delete obj1[attr]} }
return obj1;
}
如果要将object2的内容复制(或克隆,包括数组/子对象)到object1中,请尝试使用jquery
如果要从obj1中删除obj2中不存在的特性。然后你总是以obj2结束。我的意思是,不管obj1拥有什么,生成的json将始终是obj2。您能提供一个更好的例子吗?我一直在研究jquery和angular的扩展函数,但它们并没有删除删除的属性。@CyrilCherian试图说的是,您试图做的事情听起来不合逻辑,因为您实际上可以键入:
obj1=obj2我会按照你的要求去做。没错,西里尔·切丽亚。但随后obj1更改为obj2。我需要保留obj1,因为它已连接侦听器。您不能重新连接侦听器吗?你能用另一个例子或更深入的解释来更新你的问题吗?这应该是可行的,有两个注释:不要忘记检查hasOwnProperty,注意obj2有属性“attr”,但它是“false”或“undefined”或0:你的条件将评估为“true”并且该属性将从obj1中删除。。。尝试类似于if(!(obj2.hasOwnProperty(attr)){delete obj1[attr]}的方法:)谢谢Cyril和Octav。我将使用这个的递归版本。
Please find jsfiddle [here][2]