请问老师哪里出错了,输出arr2显示的是空数组

请问老师哪里出错了,输出arr2显示的是空数组

 var arr = [123, [456]]

        function deepClone(o) {

            var result = []

            for (var i = 0i < o.lengthi++) {

                result.push(deepClone(o[i])) 

            }

            return result

        }

        var arr2 = deepClone(arr)

        console.log(arr2);


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,对于数组[1, 2, 3, [4, 5, 6]]如果不断进行递归的话,那么最终传入deepClone函数的是数组中的一个个元素,例如:deepClone(1)、deepClone(2)等,将数字代入deepClone函数,得到的result为空数组[],arr2变量中存放的是result,所以也为空数组,如图

https://img1.sycdn.imooc.com//climg/6140786709ad44e810870489.jpg

因此,需要按照视频中老师所讲的那样,添加一个if判断条件,当传入的参数是数组时,才会执行这段代码,如果是基本类型的数据,则直接赋给result,如图

https://img1.sycdn.imooc.com//climg/614079bb095a69cb11990489.jpg

祝学习愉快!

  • 蟹黄包12138 提问者 #1

    不好意思老师,我还是没太理解,仅就我这个例子来讲,我理解的是:我传入的参数本身已经就是一个数组了,那么我加上或是不加 Array.isArray(o) 这个判断条件应该对结果不会产生任何影响,那么为什么当我不加上判断条件时传入deepClone这个函数中的参数会变成数组中的一个一个的元素而不是这个数组本身?


    2021-09-15 10:39:12
  • 蟹黄包12138 提问者 #2
    加上Array.isArray(o)这个判断条件后,首先会判断数组中的元素是不是数组,1,2,3是基本数据类型,所以会执行else中的代码,然后[4,5,6]是数组 会执行 if中的代码,然后重复这个过程,请问老师我理解的对嘛?
    2021-09-15 10:44:33
  • 好帮手慕然然 回复 提问者 蟹黄包12138 #3

    同学你好,理解的没问题,是这个意思,所以如果不加上Array.isArray(o)这个判断条件的话,就会把1,2,3等基本数据类型当做数组来处理,结果肯定是错的。

    祝学习愉快!

    2021-09-15 11:00:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师