如何把數組按照從小到大或從大到小的方式排序?


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