Javascript jquery深层替换

Javascript jquery深层替换,javascript,jquery,Javascript,Jquery,这是我试图做的一个过于简单的版本 var usersChoice; var object1 = {name: 'fu', id:'123', infoArray: [1,2,3,4,5]}; var object2 = {name: 'bar', id:'456', infoArray: [9,8]}; jQuery.extend(true, usersChoice, object1); 如果我想改变主意 jQuery.extend(true, usersChoice, object2);

这是我试图做的一个过于简单的版本

var usersChoice;
var object1 = {name: 'fu',  id:'123', infoArray: [1,2,3,4,5]};
var object2 = {name: 'bar', id:'456', infoArray: [9,8]};

jQuery.extend(true, usersChoice, object1);
如果我想改变主意

jQuery.extend(true, usersChoice, object2);
结果是:

usersChoice = {name: 'bar', id:'456', infoArray: [9,8,***3,4,5***]};
我想要的是用新的东西完全替换旧的东西。即使只是一个深度擦除功能,我也可以在扩展之前调用,比如

userChoice.nukeItFromOrbit();
对于记录,我尝试了仅userChoice=newobject或不复制,而只是指向原始对象。这两种解决方案都有一种恼人的倾向,即在某一点超出范围。(我怀疑这些物品中有一些是以“这个”的形式传递的)


那么,我如何做到这一点而不重新发明深度复制轮子呢?我一直在到处寻找,我所发现的一切都是重新发明轮子,或者被告知他们没有理由让我做我正在做的事情=/

嗯,我希望我没有遗漏什么(如果有,请给我留言),但为什么不扩展一个空对象呢

usersChoice = jQuery.extend(true, {}, object2);

所以你想让它合并除了数组以外的所有东西?或者,如果object2缺少名称,那么最终结果是否应该缺少名称?(另外,给我一个这样的用例,因为我从来都不需要这样做)问题还不清楚,你想要deepExtend还是不想要deepExtend?@Abid我想要deepReplace,旧对象将被屏蔽所有数据和新对象。@dmos我想要用新对象完全替换旧对象。如果object2缺少名称,那么新对象现在也将缺少名称。您可以只保留usersChoice的原始副本(例如usersChoiceBackup),然后将object1或object2应用于它,并将结果分配给usersChoice
usersChoice=jQuery.extend(true,usersChoiceBackup,object1)
。。这样原始值就不会被修改,可以作为基本数据集使用。老实说,我不知道你的解决方案为什么不起作用usersChoice=jQuery.extend(true,{},object2);'在其所在的子函数范围内工作,但更改不会影响“jQuery.extend(true,usersChoice,object2);”之外的userChoice确实超出了范围,但有我提到的局限性。好吧,这需要一些示例代码来测试我当时猜测的用法(以测试答案)。