猿问

js递归函数返回值

1.为什么这个递归函数没有把最后一项数组深拷贝完成。我的思路哪里出现了问题,请大家指点一下,这个递归函数一直晕

代码:


<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title></title>

    </head>

    <body>

        <script type="text/javascript">

            var a=[1,2,3,4,5,[1,2,3,4]];

            var j=[];

            function copyarr(obj){

                var n=obj instanceof Array;

                for (var i=0;i<obj.length;i++) {

                    if(typeof obj[i]=='object'){

                        copyarr(obj[i]);

                    }else{

                        j[i]=obj[i];

                    }

                }

                return j;

            }

            copyarr(a);

            console.log(j)[1,2,3,4,5]

        </script>

    </body>

</html>


HUX布斯
浏览 1167回答 3
3回答

肥皂起泡泡

因为在copyarr(obj[i]);的时候你没有赋值为j[i],还有就是j这个数组应该是一个中间变量,用来保存a的子元素中也存在数组的情况,因为你这个copyarr这个函数是返回了j,所以不用担心函数执行的结果不正确。你可以试试这样:<script type="text/javascript">&nbsp; var a=[1,2,3,4,5,[1,2,3,4]];&nbsp; // var j=[];&nbsp; function copyarr(obj){&nbsp; &nbsp; var j = [];&nbsp; &nbsp; var n=obj instanceof Array;&nbsp; &nbsp; for (var i=0;i<obj.length;i++) {&nbsp; &nbsp; &nbsp; if(typeof obj[i]=='object'){&nbsp; &nbsp; &nbsp; &nbsp; // (obj[i]);&nbsp; &nbsp; &nbsp; &nbsp; j[i] = copyarr(obj[i]);&nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; j[i]=obj[i];&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return j;&nbsp; }&nbsp; var r = copyarr(a);&nbsp; console.log(r)//[1,2,3,4,5]</script>

鸿蒙传说

if(typeof obj[i]=='object'){&nbsp; &nbsp; &nbsp;copyarr(obj[i]);&nbsp;}else{&nbsp; &nbsp; &nbsp;j[i]=obj[i];&nbsp;}&nbsp;1.如果if成立了.那么会把二维数组[1,2,3,4]传进去重新执行.&nbsp;2.重新执行,那么i=0, j[i]=obj[i] 就变成这样 j[0] = obj[0], 会把第一次的值覆盖.&nbsp;3.这块j数组的下标就不能是i, 换成j[j.length-1].就不会覆盖原来的值.

临摹微笑

你把内部的数组 [1,2,3,4] 改成 [6,7,8,9] 你就知道为什么了。得到的结果是: [6, 7, 8, 9, 5]其实导致的原因 还是第二次循环的 时候 j[i] 造成的 原因
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答