一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

javascript中sort()排序实例介绍

时间:2013-12-07 编辑:简简单单 来源:一聚教程网

在默认情况下,sort()方法按升序排列数组项目——即最小的值位于最前面,最大的值位于最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串,如下所示:

 代码如下 复制代码

var value=[8,10,0,5,20];
value.sort(value);
alert(value);//0,10,20,5,8

可见,即使例子中值的顺序没有问题,但sort()方法也会根据测试字符串的结果改变原来的顺序。因为数值5虽然小于10,但是在进行字符串比较时候5位于10的前面,于是数组的顺序就被修改了,不用说,这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接收一个比较函数作为参数,以便我们指定那个值位于哪个值前面。
比较函数接收两个参数,如果第一个参数应该位于第二个参数前面则返回一个负数,如果两个参数相等则返回0,如果第一个参数位于第二个参数之后则返回一个正数。以下就是一个简单的比较函数:

 代码如下 复制代码

对于数值类型或者其valueof()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要第二个值减去第一个值即可。

 代码如下 复制代码
function va(value1,value2){
     return value2-value1;
    }//升序
    function vac(value1,value2){
     return value1-value2;
    }//降序
    var co=[88,22,44,11,20]
    co.sort(va)
    var ka=[99,22,44,88,23]
    ka.sort(vac)
    document.write(co+'
');
    document.write(ka)

如果只是想反转数组原来的顺序,使用reveres()方法会更快一点。

如下:

 代码如下 复制代码


   var arrA = [6,2,4,3,5,1];
    /**//*arrA.sort();
    document.writeln(arrA);
    */
    function desc(x,y)
    ...{
        if (x > y)  
            return -1;
        if (x < y)          
            return 1;
    }
    function asc(x,y)
    ...{
        if (x > y)  
            return 1;
        if (x < y)          
            return -1;
    }
    arrA.sort(desc);    // sort by desc
    document.writeln(arrA);
    document.writeln("
");
    arrA.sort(asc);    //sort by asc
    document.writeln(arrA);


//输出结果:
6,5,4,3,2,1
1,2,3,4,5,6

另外,可以直接把一个无名函数直接放到sort()方法的调用中。如下的例子是将奇数排在前面,偶数排在后面,例子如下:

 代码如下 复制代码


        var arrA = [6,2,4,3,5,1];
        arrA.sort( function(x, y) ...{
            if (x % 2 ==0)  
                return 11;
            if (x % 2 !=0)        
                return -1;
            }
        );
       document.writeln(arrA);


//输出:1,5,3,4,6,2

热门栏目