数组的sort()方法传参疑惑

2017-02-04  本文已影响48人  mint9602

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

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

问题出现了,"10"位于"5"的前面,数组的顺序被改变了,这种排序方法在很多情况下都不是最佳方案。
因此ECMA引入了一个sort()方法,这个方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。
以下就是一个简单的比较函数:

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

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

实际上这个compare函数也可以如下来写:

function compare(value1, value2) {
    return value2 - value1;
}
上一篇 下一篇

猜你喜欢

热点阅读