对于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"}];