Javascript 数组中sort()方法
在默认情况下,sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串,如下所示:
var values = [5,293,3,19,1];
values.sort();
console.log(values);
可见,sort()方法是用字符串进行比较的,即字符串进行扫描,相同位哪个值的ASCII码值大,数组中的哪一项大,与字符串后面的长度无关。不用说,这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。(有点像冒泡的核心算法)
比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。以下就是一个简单的比较函数:
function compare(value1,value2) {
if(value1 < value2) {
return -1;
}
else if(value1 > value2) {
return 1;
}
else {
return 0;
}
}
这个比较函数可以适用于大多数数据类型,只要将其作为参数传递给sort()方法即可,如下面这个例子所示:
var values = [5,293,3,19,1];
values.sort(compare);
console.log(values); //1,3,5,19,293
sort()的返回值是经过排序过后的数组。
对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要用第二个值减第一个值即可。
function compare(value1,value2) {
return value2 - value1;
}
引自:《Javascript 高级程序设计 第3版》