2014年1月19日 星期日

【Javascript】Array.sort() 自訂排序規則

今天使用 native 的函數 sort() 來排序用戶輸入的資料

在數值的部份我就有點納悶

[1, 6, 4, 10, 20, 2]

這幾個數字由小排到大居然會是

[1, 10, 2, 20, 4, 6]

猜想應該是統一使用 toString() 採 ascii 碼來排序

這個時候就要自訂如何去排序啦

根據 w3c 的文件

Array.sort() 內可以傳入一個函數

參數值會有 a跟b 兩個

而sort函數會依照傳入的函數所回傳的結果來決定a 與 b 是否要交換位置

先看我改後的js (ascending):
var myArr = new Array(1, 6, 4, 10, 20, 2);

myArr.sort(function (A, B) {
    return A - B;
});

console.log(myArr); //[1, 2, 4, 6, 10, 20] 

依據回傳結果

小於0的話A在前面
等於0的話不變
大於0的話A在後面

如果是要由大排到小的話 (descending)
就改為:
myArr.sort(function (A, B) {
    return B - A;
});

沒有留言:

張貼留言