javascript数组的深度复制解析

对于javascript而言,数组是引用类型,如果要想复制一个数组,包括concat、slice在内的函数,都是浅层复制。也就是说,对于一个二维数组来说,用concat来做复制,第二维的数组还是引用,修改了新数组同样会使旧数组发生改变。

    于是乎,想要写一个深度复制的函数,来帮助做组数的深度复制。

一般情况下,使用 “=” 可以实现赋值。但对于数组、对象、函数等这些引用类型的数据,这个符号就不好使了。

数组的深度复制

2.1 使用 JSON 方法

JSON.stringify(array) 然后再 JSON.parse()。示例:

var a = [{"aa":"11","bb":"11"},{"aa":"22","bb":"22"}];
var b =JSON.parse(JSON.stringify(a));
a[0].aa = "33";
console.log(a);  //[{"aa":"33","bb":"11"},{"aa":"22","bb":"22"}];
console.log(b);  //[{"aa":"11","bb":"11"},{"aa":"22","bb":"22"}];

2.3 使用 jQuery 的 extend 方法

如果你在使用 jQuery,那么最简单的方法是使用 extend 插件方法。示例:

var a = [{"aa":"11","bb":"11"},{"aa":"22","bb":"22"}];
var b = $.extend(true, [], a);
a[0].aa = "33";
console.log(a);  //[{"aa":"33","bb":"11"},{"aa":"22","bb":"22"}];
console.log(b);  //[{"aa":"11","bb":"11"},{"aa":"22","bb":"22"}];

猜你喜欢

转载自my.oschina.net/luyaolove/blog/1817946
今日推荐