數組(Array)在JavaScript中是非常常用的類型,關於數組的排序,與C#等語法中的排序,乍看相似,其實差別比較大。 Array的排序方法有兩個,分別是reverse()和sort()。 reverse()方法:反轉數組項的順序,和sort()方法結合使用,可方便實現數組的升序和降序排列。 ...
數組(Array)在JavaScript中是非常常用的類型,關於數組的排序,與C#等語法中的排序,乍看相似,其實差別比較大。
Array的排序方法有兩個,分別是reverse()和sort()。
reverse()方法:反轉數組項的順序,和sort()方法結合使用,可方便實現數組的升序和降序排列。
sort()方法:對數組項進行排序,預設情況下按照升序排列數組項,但前提是將數組項按照字元串類型來進行排序,也就是說sort()方法會調用每個數組項的toString()轉型方法之後,再進行排序。如果不清楚這個情況,會導致數字等排序不是自己想要的效果。
var values = [0, 1, 5, 10, 15]; values.sort(); alert(values); //0, 1, 10, 15, 5
如果想實現數字等類型的排序應該怎麼做呢?JavaScript給出的辦法是給sort()方法傳遞一個比較函數作為參數,如下例:
function compare(value1,value2) { if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } } var values = [0, 1, 5, 10, 15]; values.sort(compare); alert (values); // 0, 1, 5, 10, 15
需要說明的是,對於比較函數(compare)的兩個參數,如果第一個參數應該位於第二個之前,則返回一個負數;如果第一個參數應該位於第二個之後,則返回一個正數;如果兩個參數相等,則返回0。由此可見compare是一個升序排序函數,如果要按照降序排序,那麼調整返回值即可:
function compare(value1,value2) { if (value1 < value2) { return 1; } else if (value1 > value2) { return -1; } else { return 0; } }View Code
當然,不需要寫兩個比較函數來實現數組的升序和降序排列,sort()方法加上reverse()方法是更好的選擇。
以上內容均來自《JavaScript高級程式設計(第3版)》。