Array.prototype.sort()對數組對象排序的方法

Array.prototype.sort()方法接受一個參數——Function,Function會提供兩個參數,分別是兩個進行比較的元素,若是元素是String類型則經過Unicode code進行比較,若是是Number類型則比較值的大小。若是比較的函數中返回1則兩個元素交換位置,0和-1不交換位置。數組

var arr = [3, 5, 2, 1];
// 從小到大排序
arr.sort(function(a, b){
    return a > b ? 1 : -1;
});
// 獲得的結果:[1, 2, 3, 5]

 

若是是對一個數組對象進行排序,原理以下。函數

var arr = [
    { a : 2, b : 3.2}, 
    { a : 3, b : 1.2}, 
    { a : 4, b : 2.2}, 
    { a : 6, b : 1.2}, 
    { a : 5, b : 3.2}
]
/// 從小到大按屬性b排序
arr.sort(function(x, y){
    return x.b > y.b ? 1:-1;
});

x和y就是arr的一個元素,即一個對象,因此直接比較兩個對象的屬性便可。spa


上面的例子中,最小的元素中有重複,若是需求是:先按b屬性從小到大排序,若是最小中有重複則再按a屬性排序,那應該怎麼寫呢?
在排序的時候,先按b屬性排序,若是x.b的大於y.b則將x移到y的右邊,若是x.b等於y.b則再經過x.a和y.a進行比較,因此代碼以下。prototype

arr.sort(function(x, y){
    if(x.b > y.b){
        return 1;
    }else if(x.b === y.b){
        return x.a > y.a ? 1 : -1;
    }else if(x.b < y.b){
        return -1;
    }
});
相關文章
相關標籤/搜索