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

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

  <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 回答

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

 arr[7]="**";

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

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

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

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

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

0 回复 有任何疑惑可以回复我~
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>");
 }

注释得应该可以看懂

2 回复 有任何疑惑可以回复我~

楼上正解

0 回复 有任何疑惑可以回复我~

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

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

让当前的index减一

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

1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

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

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

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

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

0 回复 有任何疑惑可以回复我~
#1

风早君418 提问者

我只是想看懂他的原理
2016-07-06 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信