为了账号安全,请及时绑定邮箱和手机立即绑定

js递归函数返回值

js递归函数返回值

HUX布斯 2019-03-11 17:19:13
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>
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

因为在copyarr(obj[i]);的时候你没有赋值为j[i],还有就是j这个数组应该是一个中间变量,用来保存a的子元素中也存在数组的情况,因为你这个copyarr这个函数是返回了j,所以不用担心函数执行的结果不正确。

你可以试试这样:


<script type="text/javascript">

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

  // var j=[];

  function copyarr(obj){

    var j = [];

    var n=obj instanceof Array;

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

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

        // (obj[i]);

        j[i] = copyarr(obj[i]);

      }else{

        j[i]=obj[i];

      }

    }

    return j;

  }

  var r = copyarr(a);

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

</script>


查看完整回答
反对 回复 2019-03-20
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

     copyarr(obj[i]);

 }else{

     j[i]=obj[i];

 }

 1.如果if成立了.那么会把二维数组[1,2,3,4]传进去重新执行.

 2.重新执行,那么i=0, j[i]=obj[i] 就变成这样 j[0] = obj[0], 会把第一次的值覆盖.

 3.这块j数组的下标就不能是i, 换成j[j.length-1].就不会覆盖原来的值.


查看完整回答
反对 回复 2019-03-20
?
临摹微笑

TA贡献1982条经验 获得超2个赞

你把内部的数组 [1,2,3,4] 改成 [6,7,8,9] 你就知道为什么了。

得到的结果是: [6, 7, 8, 9, 5]

其实导致的原因 还是第二次循环的 时候 j[i] 造成的 原因


查看完整回答
反对 回复 2019-03-20
  • 3 回答
  • 0 关注
  • 1166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信