1.多维数组深拷贝
对于一维数组,直接用slice和concat就可以进行copy
多维数组的话,写个递归逐个赋值即可。请注意一点,由于在JS里面数组其实就是对象
如果你直接给数组挂了一些属性,而不是在Array.prototype上,同样的你要使用for in来找出他们。
比如 var arr = ["a", "b", "c"];
arr.show = function () {
console.log(this);
}
arr.data = 100;
如果需要同样需要复制的话,则需要使用for in循环
/*
数组的深拷贝
*/
function arrayDeepen(arr) {
/*
@arr: 要进行深拷贝的数组
*/
var temp_arr = [];
for(var i=0; i<arr.length; ++i) {
if(Array.isArray(arr[i])){
temp_arr[i] = arrayDeepen(arr[i]);
}else {
temp_arr[i] = arr[i];
}
}
return temp_arr;
}
var a = [0, 1, 2, 3, [4, 5]];
var b = arrayDeepen(a);
a[4].push(6);
console.log(a);
console.log(b);
2.数组一维化
/*
多维数组一维化
[1, 2, 3, 4, [5, 6]]
转化为 [1, 2, 3, 4, 5, 6]
*/
function flatten(arr, temp_arr) {
/*
@arr: 要进行深拷贝的数组
@temp_arr: 存储中间结果的临时变量
*/
var temp_arr = temp_arr || [];
for(var i=0; i<arr.length; ++i) {
if(Array.isArray(arr[i])) {
flatten(arr[i], temp_arr);
}else {
temp_arr.push(arr[i])
}
}
return temp_arr;
}
console.log(flatten([1, [2, 3], [4, 5,[6, 7]], 8]))
代码有点相似,仔细区别一下就好
参考blog: 点击打开链接