如何把数组按照从小到大或从大到小的方式排序?

JavaScript中内置对象——数组本身拥有排序方法:array.sort()
关于这个方法很多人都有误区,我也不例外。
在某些数组下这个方法会按照从小到大的方式排序

var arr=[1,3,4,2,5,7,9,8,6];
arr=arr.sort();
alert(arr); //[1,2,3,4,5,6,7,8,9] OK  
换一个数组看看,这个方法立马很诡异了
var arr=[1,11,22,111];
arr=arr.sort();
alert(arr); //[1,11,111,22] error

why?问题出在哪里?为什么换个数组这个方法就不行了。
如果我们查阅JavaScript核心API的话会发现,
array.sort()默认是按照字符编码的顺序来对数组中的元素进行排序的。
如果我们的数组中元素不是字符串的话,
它会默认将把数组的元素都转换成字符串,然后进行比较。
现在我们手动把111转化成“111”,22转化成“22”,然后比较就会发现”22”>”111”。

alert("22">"111") // true

好了,问题的症结已经被我们发现了。
回到标题,如何让数组按照我们希望的方式来排序呢?
array.sort()为我们提供强大的参数:orderfunc。
解决方法:array.sort(orderfunc)

function orderfunc(a,b){
return a-b;
} 
var arr=[1,11,22,111];
arr=arr.sort(orderfunc);
alert(arr); //[1,11,22,111] ok

如何我们需要从大到小的顺序排序的话,把b放在a前面即可。

function orderfunc(a,b){
return b-a;
} 
var arr=[1,11,22,111];
arr=arr.sort(orderfunc);
alert(arr); //[111,22,11,1]

总结:字符串比较与数值比较截然不同。