深克隆的一些理解
相关代码:
<script>
// 原数组
var arr1 = [33, 44, 11, 22, [33, 44, [77, 88, 99]]];
// 这个函数会被递归
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(arr2);
// 是否藕断丝连
console.log(arr1[4]==arr2[4]);
arr1[4].push(99);
console.log(arr2[4]);
</script>
问题描述:
我对判断语句的理解:如果是数组,则把数组推进result(自动在result形成二维数组),因为是数组则又可以进行递归,得到的数值推进二维数组①。
如果是基本类型数值,则直接把数值推进result②。
顺序是①→②→①递归。
if (Array.isArray(arr[i])) {
// 递归
result.push(deepClone(arr[i])); ①
} else {
// 如果遍历到的项不是数组,是基本类型值,就直接推入到结果数组中
// 相当于是递归的出口
result.push(arr[i]); ②
}
这个返回,不就是定义函数的内部结果形式?就相当于之前的 return a+b,调用函数sum(3,4)就可得到7一样道理吧?我函数内部返回得一个结果模式,最后直接调用函数即可。
另外这个返回是for循环结束之后的一个返回对吗?
// 返回结果数组
return result;
17
收起
正在回答
1回答
同学你好,解答如下:
1、如果arr[i]这项是数组,则会执行result.push(deepClone(arr[i]))这句代码,这句代码是再次调用deepClone方法,并把deepClone的返回结果推入到result这个数组中。
2、return result是deepClone函数的返回值,执行完一次deepClone函数,就会得到一个result数组。
老师将这段代码的执行结果整理成了图文节,同学可以看完再理解一下,链接:https://class.imooc.com/lesson/1625#mid=45591
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星