js小笔记之重排序方法

190 阅读1分钟

这些在看红宝书,看到一个重排序方法觉得平时还是经常会用到的,所以写下这篇小笔记~

下面请看这个例子:

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

可以看到,例子中的排序是没有问题的,但是sort方法也会根据测试字符串的结果改变原来的顺序,因为数值5虽然小于10,但是在进行字符串比较时,"10"则位于"5"的前面,于是数组的顺序就被改变了,所以这种排序方式在很多情况下都不是最佳方案,因此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

这样是升序效果。如果想要降序效果,交换比较函数返回的值即可。

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) // 15,10,5,1,0

如果只是想要反转原来的顺序,直接用reverse()方法就好