js关于二维数组输出的问题

    最近在学习js,之前在上课的时候无论是C++还是java都有学过二维数组,然而宝宝居然不知道二维数组要怎么输出!!!之前是有多渣多混日子啊。。。哎,心碎成了渣渣。。。让我乘热打铁加深下记忆。。。

    二维数组必须一行一行输出才能输出二维的你想要的样子,你应该懂得,不然输出的就是所有元素在一行或者直接不显示。举个例子:

var infos =[["小A","女",21,"大一"],
                ["小B","男",23,"大三"],
                ["小C","男",24,"大四"],
                ["小D","女",21,"大一"],
                ["小E","女",22,"大四"],
                ["小F","男",21,"大一"],
                ["小G","女",22,"大二"],
                ["小H","女",20,"大三"],
                ["小I","女",20,"大一"],
                ["小J","男",20,"大三"]];
 
 for(var i=0;i<10;i++){
    if(infos[i][1]=="女" && infos[i][3]=="大一"){    //筛选出所有大一女生的信息
        for(var j=0;j<infos[i].length;j++){    //遍历一行里的每个元素
            document.write(infos[i][j]+" ");   //输出一行
        }
        document.write("<br/>");    //输出一行后换行,接着继续遍历下一行
    }
  }

    说到数组,补充一点数组的方法:

                                                         

    Ps1:concat()这个方法是将几个数组连起来,合并成一个数组,但是原数组是不改变的,相当于新建了一个,所有数组之间都是用,分隔开的。如果想要改变分隔符,可以使用join("a")方法,a为你想要的连接符,空格就是空格连接,join("")就是不加分隔符,直接连起来。

    Ps2:reverse() 方法用于颠倒数组中元素的顺序。它与concat()方法不同,它会改变原来的数组,而不会创建新的数组。myarr.reverse()以后,myarr的内容就变了。

    Ps3:slice() 方法可从已有的数组中返回选定的元素。语法:

 arrayObject.slice(start,end); 

           返回一个新的数组,包含从 start 到 end (左闭右开)的 arrayObject 中的元素。该方法并不会修改数组,而是返回一个子数组。(这一点与concat()相同)

          注意:   1. 可使用负值从数组的尾部选取元素。比如-1是最后一个,-2是倒数第二个元素,以此类推。

                     2.如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。

                     3. String.substring() 与 Array.slice() 相似,前者是针对string 类型的对象,后者是针对数组类型的对象 。

    Ps4:sort()方法使数组中的元素按照一定的顺序排列。 语法:

arrayObject.sort(方法函数)

           参数规定排序顺序,要么不指定,则按unicode码顺序排列;要制定就必须是函数。例如:

1 <script type="text/javascript">
2   var myarr1 = new Array("Hello","John","love","JavaScript"); 
3   var myarr2 = new Array("80","16","50","6","100","1");
4   document.write(myarr1.sort()+"<br>");
5   document.write(myarr2.sort());
6 </script>

          运行结果:

Hello,JavaScript,John,love
1,100,16,50,6,80

         上面的代码没有按照数值的大小对数字进行排序。这是因为Array的sort()方法默认把所有元素先转换为String再排序,结果'100'排在了'16'的前面,因为字符'100'比字符'16'的ASCII码小。

         如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该代入两个参数a 和 b,其返回值如下:
             若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
             若 a 等于 b,则返回 0。
             若 a 大于 b,则返回一个大于 0 的值。

         举例代码如下:

1 <script type="text/javascript">
2     function sortNum(a,b) {
3          return a - b;   //升序,如降序,把“a - b”改成“b - a”
4     }
5     var myarr = new Array("80","16","50","6","100","1");
6     document.write(myarr + "<br>");
7     document.write(myarr.sort(sortNum));
8 </script>

         运行结果:

80,16,50,6,100,1
1,6,16,50,80,100

         为什么这么写?而且,下面的sort里面的sortNum也没有参数,怎么运行的?

         原因就是function sortNum(a,b)中的a,b并不是你所想的我们一般用的那种参数,而是unicode码里面的a,b ,不然应该写成 function sortNum(var a,var b)。
         return a-b 返回的是正数;return b-a 返回的是负数。 sort 函数是根据正负来定义升序和降序的。返回正数则升序,返回负数则降序。

         其实就是将一个方法作为参数传入sort(),模式类似于冒泡排序,比较两个数值之间的大小,结果为正位置不变,结果为负交互位置,遍历整个数组,将最终位置返回。

         如果还是不清楚的话推荐博客  http://www.cnblogs.com/longze/archive/2012/11/27/2791230.html   写得还蛮清楚地。

 

posted @ 2016-06-02 12:14  嘣嚓嚓jiji~  阅读(2366)  评论(0编辑  收藏  举报