1. 程式人生 > >js數組排序---sort

js數組排序---sort

undefined 比較 fun alt console urn -- 用兩個 屬性

自從有了sort之後 數組的排序就變得簡單多了,不僅可以比較純數字的數組,給sort(compareFunction)可以添加一個比較函數,可以有更廣泛的用途:

比較函數應該用兩個參數進行比較。給定元素 x 和 y,若:

若 x < y,在排序後的數組中 x 應該出現在 y 之前,則返回一個小於 0 的值。(降序)

若 x = y,則返回 0,則表示 x 和 y 具有相同的排序順序。(相等)

若 x > y,則返回一個小於 0 的值。(升序)

我也是幾次使用數組的sort排序,做了一下總結:

一、簡單的數值數組(升序排列):

var arr = [21,22,33,4,3,7,8,43,10,8,15];
var newArr = arr.sort(function(x,y){return x-y}); console.log(newArr);//ps:arr本身也被改變 所以直接取arr本身也是完全ok的 此處newArr和arr指向同一地址

結果:

技術分享

二、

1、按某一個對象數組的對象的屬性 (升序排列):

var arr = [  
    {‘img‘ : ‘url1‘,‘num‘ : 4},  
    {‘img‘ : ‘url2‘,‘num‘ : 5},  
    {‘img‘ : ‘url3‘,‘num‘ : 6},  
    {‘img‘ : ‘url4‘,‘num‘ : 1},  
    {
‘img‘ : ‘url5‘,‘num‘ : 2}, {‘img‘ : ‘url6‘,‘num‘ : 3}, ]; arr.sort(compare(‘num‘)); function compare(val){ return function(x,y){ var v1 = x[val]; var v2 = y[val]; return v1 - v2; } } console.log(arr);

技術分享

2、按某一個對象數組的對象的屬性 (可選擇升降序排列):

/**
    * @description 數組根據數組對象中的某個屬性值進行排序的方法
    * @param key 排序的屬性關鍵字 如number屬性(字符串形式)
    * @param rule 排序規則 true表示升序排列,false降序排序 默認升序
 * 
*/
function compare(key,rule){ //第二個參數沒有傳遞 默認升序排列 if(rule == undefined){ rule = 1; }else{ rule = (rule) ? 1 : -1; } return function(x,y){ x = x[key]; y = y[key]; if(x < y){ return rule * -1; } if(x > y){ return rule * 1; } return 0; }

var arr = [
  {‘img‘ : ‘url1‘,‘num‘ : 4},
  {‘img‘ : ‘url2‘,‘num‘ : 5},
  {‘img‘ : ‘url3‘,‘num‘ : 6},
  {‘img‘ : ‘url4‘,‘num‘ : 1},
  {‘img‘ : ‘url5‘,‘num‘ : 2},
  {‘img‘ : ‘url6‘,‘num‘ : 3},
];
arr.sort(compare(‘num‘,false));
console.log(arr);



compare函數升級款:

function compare(key,rule) {
    var ordAlpah = rule ? ‘>‘ : ‘<‘;
    var sortFun = new Function(‘a‘, ‘b‘, ‘return a.‘ + key + ordAlpah + ‘b.‘ + key + ‘?1:-1‘);
    return sortFun;
}
arr.sort(compare(‘num‘,false));
console.log(arr);

結果:

技術分享

js數組排序---sort