这是我的原始数组:
var myArray = [
{"A":"1", "B":"2"},
{"C":"3", "D":"4"},
{"E":"5", "F":"6"}
]
然后我创建此myArray的副本:
var copyArray = $.merge([], myArray);
现在我只想扩展copyArray的第一个元素:
$.extend(copyArray[0], { "Hello": "World" });
但是结果是myArray和copyArray均已更改。我只想更改copyArray。它们都更改为以下:
[
{"A":"1", "B":"2", "Hello":"World"},
{"C":"3", "D":"4"},
{"E":"5", "F":"6"}
]
这是我的小提琴,以显示此内容:http://jsfiddle.net/LesignButure/GFVUy/
如果对象存在于数组中,则保留引用;即它不会进行深层复制。
当将真实值作为初始参数传递时,jQuery的extend方法执行深度复制:
$.extend(true, [], myArray );
var myArray = [
{"A":"1", "B":"2"},
{"C":"3", "D":"4"},
{"E":"5", "F":"6"}
];
var copyArray = $.extend(true, [], myArray);
$.extend(copyArray[0], { "Hello": "World" });
console.log(myArray);
console.log(copyArray);
尝试一下..
extend
在将真值作为第一个参数传递时执行深度复制,因此可以执行
var copyArray = $.extend(true, [], myArray);
有关更多信息,请参见the docs。>>
这解决了您的问题。
您可以通过将true作为第一个参数传递来使用$.extend进行深度复制:
使用jQuery $ .extend或纯javascript
尝试一下