• 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码来降序排序
    }
     
     
     
     
     
  • 相关阅读:
    Linux内存管理2---段机制
    XCOJ 1102 (树形DP+背包)
    ZOJ 3805 (树形DP)
    Ural 1018 (树形DP+背包+优化)
    POJ 2342 (树形DP)
    HDU 2612 (BFS搜索+多终点)
    POJ 1947 (树形DP+背包)
    HDU 1561 (树形DP+背包)
    HDU 1045 (DFS搜索)
    HDU 5067 (状态压缩DP+TSP)
  • 原文地址:https://www.cnblogs.com/eversleeping/p/3126958.html
Copyright © 2020-2023  润新知