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


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") // false

好了,问题的症结已经被我们发现了。

回到标题,如何让数组按照我们希望的方式来排序呢?

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]

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM