浅克隆和深克隆
1.浅克隆 克隆数据组的第一层 拷贝地址 一改全改
准备一个空的结果数组 使用for遍历原数组 ,将遍历到的项push 到结果数组中
// 5-8 浅克隆
var arr = [4, 3, [2, 5], 1, 4];
var result = [];
// 遍历原数组,将遍历到的项都推入到结果数组中
for (var i = 0; i < arr.length; i++) {
result.push(arr[i]);
}
// 输出结果数组
console.log(arr == result); //false确实被分开了
console.log(result); //[33, 44, 11, 22, [77, 88]]但是藕断丝连
2 ,深拷贝 拷贝的是值 ,两者之间没有影响
如果遍历的项是基本类型 直接推入到数组, 如果遍历的项又是数组 ,继续执行浅克隆的操作
var arr1 = [33, 44,11,22,[ 77, 88,[ 33, 44]]];
function deepClone(arr){
var result = []; //局部变量
// 遍历原数组,
for (var i = 0; i < arr.length; i++) {
// 如果 遍历到的项是数组
if(Array.isArray(arr[i])){
// 递归
result.push.(deepClone(arr[i]));
}else{
//如果 遍历到的项是不是数组 是基本类型值 直接推入结果数组
//要设置递归终止条件
result.push(arr[i]);
}
}
//返回结果
return result;
}
//测试
var arr2= deepClone(arr1);
console.log(arr1[4] == ar2r[4]); //false确实被分开了
arr1[4].push(99)
console.log(arr2); //没有 99