自从有了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指向同一地址



 

结果:

javascript sort 降序 js数组sort升序降序_对象数组

 

二、

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);



 

javascript sort 降序 js数组sort升序降序_数组_02

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);



 结果:

javascript sort 降序 js数组sort升序降序_javascript sort 降序_03