代码改变世界

JavaScript学习笔记(一)数组排序

2017-12-15 06:13  凌霄GISer  阅读(284)  评论(0编辑  收藏  举报

数组(Array)在JavaScript中是非常常用的类型,关于数组的排序,与C#等语法中的排序,乍看相似,其实差别比较大。

Array的排序方法有两个,分别是reverse()和sort()。

reverse()方法:反转数组项的顺序,和sort()方法结合使用,可方便实现数组的升序和降序排列。

sort()方法:对数组项进行排序,默认情况下按照升序排列数组项,但前提是将数组项按照字符串类型来进行排序,也就是说sort()方法会调用每个数组项的toString()转型方法之后,再进行排序。如果不清楚这个情况,会导致数字等排序不是自己想要的效果。

var values = [0, 1, 5, 10, 15];
values.sort();
alert(values);  //0, 1, 10, 15, 5

如果想实现数字等类型的排序应该怎么做呢?JavaScript给出的办法是给sort()方法传递一个比较函数作为参数,如下例:

function compare(value1,value2) {
    if (value1 < value2) {
            return -1;  
    } else if (value1 > value2) {
            return 1;
    } else {
            return 0;
    }
}

var values = [0, 1, 5, 10, 15];
values.sort(compare);  
alert (values);   // 0, 1, 5, 10, 15

需要说明的是,对于比较函数(compare)的两个参数,如果第一个参数应该位于第二个之前,则返回一个负数;如果第一个参数应该位于第二个之后,则返回一个正数;如果两个参数相等则返回0。由此可见compare是一个升序排序函数,如果要按照降序排序,那么调整返回值即可:

function compare(value1,value2) {
    if (value1 < value2) {
            return 1;  
    } else if (value1 > value2) {
            return -1;
    } else {
            return 0;
    }
}
View Code

当然,不需要写两个比较函数来实现数组的升序和降序排列,sort()方法加上reverse()方法是更好的选择。

以上内容均来自《JavaScript高级程序设计(第3版)》。