发布于 ,更新于 

JavaScript 的数组排序

JavaScript的数组中,提供了一个相当实用的方法,用于数组的排序。

这个方法就是 sort()。调用 sort() 方法之后,数组会根据每一项从小到大排列,看看下面例子:

1
2
3
var arr = [1, 2, 3, 4, 5, 9, 8, 7, 6];
arr.sort();
console.log(arr);

得到的结果如下:

1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

再看看一个例子:

1
2
3
var arr = [10086, 10010, 28, 56, 3, 31];
arr.sort();
console.log(arr);

得到的结果如下:

1
[10010, 10086, 28, 3, 31, 56]

上面的结果并没有按照数值的大小,从小到大排列。而是把所有的数字值先转换为字符串,再以字符串进行比较所得到的排序结果。如果需要以数值进行排序,则 sort 方法需要一个传入一个比较函数作为参数,来控制数组的排序方向,例如:

1
2
3
4
5
6
7
function compareNumber(a, b) {
return a - b;
}

var arr = [10086, 10010, 28, 56, 3, 31];
arr.sort(compareNumber);
console.log(arr);

得到的结果如下:

1
[3, 28, 31, 56, 10010, 10086]

加入了比较函数compareNumber来控制数组的排序之后,可以看到排序结果按照意想中的按数值从小到达进行排列。

如果需要按照数值的大小,从大到小排列呢。以下说明以下比较函数的控制规则:

1
2
3
4
5
function compareNumber(a, b) {
//return -1;
//return 0;
//return 1;
}
  • (1) 如果a应该排在b的前面,返回负数
  • (2) 如果a应该排在b的后面,返回正数
  • (3) 如果a与b相等,返回0