今晚遇到的坑,花了接近3个小时
jquery 中数组的复制 有坑,其实不是复制,只是一个引用
比如
a = [1,2,3,4,5];
var b = a;
b.reverse();
-----------------
console 结果
b = [5,4,3,2,1]
a= [5,4,3,2,1]
发现原始数组也会跟着变化,所以当你要给一个数组倒序后复制给新的数组
不能用
var newArray = Array.reverse();
因为原始数组也会同时被修改
----------
解决方法
才用深复制:
Ext的两种克隆的方法:
可以克隆对象、数据等:var newJson = Ext.clone(json);
只能克隆数组:var newJson = Ext.Array.clone(json);
JQuery的方法:
深复制【可以迭代】:var newJson = jQuery.extend(true,{}, json);
浅复制【不能迭代】:var newJson = jQuery.extend({}, json);
var newJson = $.map(json,function (n) { return n; });
数组的克隆方法:
var newJson = json.concat();
var newJson = json.splice(0);
此上几种方法都是复制一个新的对象或者数组,但是如果直接通过parent【iframe情况】的方式去父窗口的对象的时候会有问题【存在引用关系】,需要注意,可以把取的方式改成传递数据的方式。
jquery 中数组的复制 有坑,其实不是复制,只是一个引用
比如
a = [1,2,3,4,5];
var b = a;
b.reverse();
-----------------
console 结果
b = [5,4,3,2,1]
a= [5,4,3,2,1]
发现原始数组也会跟着变化,所以当你要给一个数组倒序后复制给新的数组
不能用
var newArray = Array.reverse();
因为原始数组也会同时被修改
----------
解决方法
才用深复制:
Ext的两种克隆的方法:
可以克隆对象、数据等:var newJson = Ext.clone(json);
只能克隆数组:var newJson = Ext.Array.clone(json);
JQuery的方法:
深复制【可以迭代】:var newJson = jQuery.extend(true,{}, json);
浅复制【不能迭代】:var newJson = jQuery.extend({}, json);
var newJson = $.map(json,function (n) { return n; });
数组的克隆方法:
var newJson = json.concat();
var newJson = json.splice(0);
此上几种方法都是复制一个新的对象或者数组,但是如果直接通过parent【iframe情况】的方式去父窗口的对象的时候会有问题【存在引用关系】,需要注意,可以把取的方式改成传递数据的方式。