zoukankan      html  css  js  c++  java
  • Js数组的排序(转)

    用数组的排序:sort()方法。 但sort()方法本身是按ASCII字符代码从小到大排列的.所以说,如果是数字的话,会出现下面这种情况:
    var arr = [3, 32, 3, 5];
    arr.sort();
    alert(arr.toString());
      //输出:2,3,32,5

    但是, sort()方法可以接收一个参数,就是一个比较函数;也就是说,可以自己写个比较函数;这样的话,不管要排序的数组里的值是什么类型的,都可以排序,前提是自己写的方法够好,如下:
    function compare(str1, str2){
        if(str1 < str2){
            return -1;
        }else if(str1 > str2){
            return 1;
        }else{
            return 0;
        }
    }
    此函数和不传递参数时的功能一样。都是从小到大排列,而且是按字符串来比较的,但如果想要从大到小排列,只需要把返回-1 和 1 的判断换一下就OK了。但两者相等的时候必须是返回0;比较函数的两个参数是不用我们写的,sort()会自动在比较的时候传进去。
    上面的判断其实和String类的localCompare()方法是一样的,所以可以直接写成这样:
    function compare(str1, str2){
        return str1.localCompare(str2);  //从小到大.
      //return -str1.localCompare(str2);  //从大到小.
    }
    上面的例子,给数字排序,可以自己写个函数,按数字来比较:
    function compareInt(int1, int2){
        var iNum1 = parseInt(int1);   
    //强制转换成int 型;
        var iNum2 = parseInt(int2);
        if(iNum1 < iNum2){
            return -1;
        }else if(iNum1 > iNum2){
            return 1;
        }else{
            return 0;
        }
    }
    这时候:
    var arr = [3, 32, 2, 5];
    arr.sort(compareint);
    alert(arr.toString());  //输出:2,3,5,32

    reverse()方法:
    此方法用来将数组中元素的顺序倒转;所以,如果一数组已经按升序排好,只需要对数组执行:reverse()就可以变成降序。上例:arr.reverse();alert(arr.toString()); //输出:32,5,3,2

    多维数组排序:
    sort()默认是按照ASCII 字符顺序进行升序排列。如果需要自定义排序,例如希望通过二维数组中的第二列数据排序:
    var testArray = new Array();
    testArray[0]= new Array('e','2','g');
    testArray[1]= new Array('b','3','c');
    testArray[2]= new Array('a','1','a');   
    testArray[3]= new Array('d','4','h');   
    testArray.sort(sortfunction);
    alert(testArray[0] + "\n" + testArray[1] + "\n" + testArray[2] + "\n" + testArray[3])

    // 排序方法中有两个参数,表示数组中两个用来排序的元素:
    function sortfunction(x,y)
    {
     return x[2].charCodeAt(0) - y[2].charCodeAt(0);//根据二维数组的第三列的第一个字母的ASCII码来降序排序
    }
     
     
     
     
     
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/eversleeping/p/3126958.html
Copyright © 2011-2022 走看看