有没有人来解释一下这些代码?这节实在看不懂啊

来源:3-8 编程练习

风早君418

2016-07-06 20:46

  <script type="text/javascript">

    //创建数组

    var arr=["*","##","***","&&","****","##*"];

    arr[7]="**";

    

    //删除数组中非*的项

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

        if(arr[i]!=undefined){

            var myarr=arr[i].split("");

            for(var j=0;j<myarr.length;j++){

                if(myarr[j]!='*'){

                    arr.splice(i,1);

                    break;

                }

            }

        }

    }


    //按照字符数排序

    arr.sort(function(a, b){

        if(a.length>b.length)

        {

            return 1;

        }

        else if(a.length<b.length)

        {

            return -1;

        }

        else

        {

            return 0;

        }

    })


    //将数组内容输出,完成达到的效果。

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

        if(arr[i] != undefined){

            document.write(arr[i]+'<br />')

        }

    }

   </script>

写回答 关注

7回答

  • 慕慕9190040
    2016-07-18 15:19:45

     var arr=['*','##','***','&&','****','##*'];

     arr[7]="**";

    document.write(arr[0]+"<br/>") //输出:*

    document.write(arr[7]+"<br/>")//输出:**

    document.write(arr[2]+"<br/>")//输出:***

    document.write(arr[4]+"<br/>")//输出:****

    其实这样的代码就可以按要求打印结果,不过楼上的各种回答加上了判断机制,一是判断有没有超出数组长度,二是判断打印的结果是不是*。

  • _LeeCode
    2016-07-10 16:10:33
    var arr = ['*','##',"***","&&","****","##*"];
     arr[7] = "**";
       //先除去arr数组中不是*的元素
     for(var i=0;i<arr.length;i++){
        if(arr[i]!=undefined){//如果arr[i]不是空值(即未赋值),则使用split函数按参数将字符串切分,返回子串数组;如果参数是"",则将字符串切分成单个字母
            var myarr=arr[i].split("");
            for(var j=0;j<myarr.length;j++){//检测myarr是不是全是*
                if(myarr[j]!='*'){//如果不是myarr不全是*则删除
                arr.splice(i,1);
                i--;//由于每次删除length的值都会减一,那么则会使每次删除元素的后一个元素得不到检测
                break;
                }
            }
        }
        else
            arr.splice(i,1);
       }
    //按*得数目对arr进行排序,使用sort函数,首先实现比较函数,以便规定排序规则;
    //比较函数可以独立书写,也可以写在sort的括号中
    //比较函数:有两个参数a,b;如果返回值为负数,a排列在b的前面;返回0位置不变;否则排列在b后面
    function regular(a,b){
        if(a.length<b.length)
            return -1;
        if(a.length>b.length)
            return 1;
        else
            return 0;
    }
    //上述函数可以改写为下面的简写形式
    /*function regular(a,b){
        return a.length-b.length;
    }*/
    arr.sort(regular);
    //循环输出arr
     for(var j=0;j<arr.length;j++){
        document.write(arr[j]+"<br>");
     }

    注释得应该可以看懂

  • 萌翎大人
    2016-07-08 17:00:30

    楼上正解

  • zhbit_hsj
    2016-07-07 17:40:43

    这个代码其实有一个bug,在删除数组其中一个元素之后会改变数组的长度,导致for循环出错

    建议在arr.splice(i,1); 与break;中添加一句i--;

    让当前的index减一

    假如删除数组index=3的位置,就再次从3开始下一次判断

  • 我何时能成为大牛
    2016-07-06 22:12:34

    split 分割字符串返回数组  splice删除数组制定位置开始指定长度的的的元素

  • 慕粉3528780
    2016-07-06 21:28:48

    根本没有必要这么复杂!我的处理:

    document.write(arr[0]+"<br/>") //输出:*

    document.write(arr[7]+"<br/>")//输出:**

    document.write(arr[2]+"<br/>")//输出:***

    document.write(arr[4]+"<br/>")//输出:****

    风早君418

    我只是想看懂他的原理

    2016-07-06 21:37:49

    共 1 条回复 >

  • 水里的海绵
    2016-07-06 21:24:13

    我也是懵懵懂懂的,需要自己多看几遍就理解了

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468194 学习 · 21891 问题

查看课程

相似问题