我试图使用jQuery深入复制一个对象,但它无法提供一个完全独立的对象。
这是我的密码。
var copy = $.extend(true, {}, this);然后,当我比较这两个对象时,我得到了以下结果:
copy == this => false (目前为止还不错)copy.LstOptions == this.LstOptions => false (目前为止还不错)copy.LstOptions[0] == this.LstOptions[0] => true (problem)LstOptions不是一个原始类型,它实际上是一个对象数组。它的内容如下:
[{"ID":22,"Name":"man"},{"ID":27,"Name":"weird"},{"ID":25,"Name":"womanii"}]为什么它没有被深拷贝,以及如何让它被深复制?
Ps:这是我的全部废话:
{"changed":false,"data":null,"LstOptions":[{"ID":22,"Name":"man"},{"ID":27,"Name":"weird"},{"ID":25,"Name":"womanii"}],"NewRecord":null,"NewID":0,"done":false}this还有一些方法(构造函数),没有属性(get/setter)。
这是一个JSFiddle https://jsfiddle.net/wk9e2kgn/1/,console.log输出true,我希望它能输出false。
发布于 2015-02-12 09:32:31
在您的示例中,jQuery运行得非常好。我创建了一个jsfiddle,向您展示jquery正在使用$.extend对您的对象进行深度复制。我还通过更改值原始对象的属性来测试它,但它不影响复制对象的相同属性。
我为此编写的代码如下:
var original= {"changed":false,"data":null,"LstOptions":[{"ID":22,"Name":"man"},{"ID":27,"Name":"weird"},{"ID":25,"Name":"womanii"}],"NewRecord":null,"NewID":0,"done":false};
// deep copy
var copy = $.extend(true, {}, original);
// compare objects which results false
alert(original.LstOptions[0]==copy.LstOptions[0]);
// change value
original.LstOptions[0].Name="Ankush";
// check same property of both objects
alert(original.LstOptions[0].Name);
alert(copy.LstOptions[0].Name);你可以在这里找到小提琴
https://stackoverflow.com/questions/28472727
复制相似问题