Mat*_*rym 65 javascript arrays jquery clone object
下面首先记录0,然后记录1.如何存储对象的副本,而不是对它的引用?
debug.log(vi.details.segment);
vi.nextSegment = vi.details;
vi.nextSegment.segment++;
debug.log(vi.details.segment);
Run Code Online (Sandbox Code Playgroud)
Mik*_*wis 132
要在jQuery中克隆一个对象:
var vi.nextSegment = jQuery.extend({}, vi.details);
Run Code Online (Sandbox Code Playgroud)
注意:以上是浅拷贝:任何嵌套对象或数组都将通过引用复制 - 这意味着您所做的任何更改vi.nextSegment.obj[prop]
都将反映在其中vi.details.obj[prop]
.如果您想要一个完全独立于原始对象的全新对象,则需要进行深层复制(true
作为第一个参数传递):
var vi.nextSegment = jQuery.extend(true, {}, vi.details);
Run Code Online (Sandbox Code Playgroud)
要阅读有关extend的更多信息,请参阅此处.
Sco*_*ler 32
看一下帖子:克隆javascript对象最有效的方法是什么
根据John Resig的回答:
// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);
Run Code Online (Sandbox Code Playgroud)
这对我使用jQuery"parseJSON()"和"JSON.stringify()"克隆对象更有效.
$.ajax({
url: 'ajax/test.html',
dataType: 'json',
success: function(data) {
var objY = $.parseJSON(JSON.stringify(data));
var objX = $.parseJSON(JSON.stringify(data));
}
});
Run Code Online (Sandbox Code Playgroud)
在objX&objY中克隆数据对象是两个不同的对象,你不必搞乱"引用"问题
格拉西亚斯!
克隆对象的另一种方法是
newObj = JSON.parse(JSON.stringify(oldObj));
Run Code Online (Sandbox Code Playgroud)
但如果它包含日期,请小心.在这种情况下,JSON.parse将返回date.toString()而不是date.