JS sort()排序及JS sort()双重排序

sort()方法用于对数组的排序,并返回数组。基本用法为:arr.sort();默认为升序排列。
例:

var arr = [5,3,1,6,4,3,2];
arr.sort(); // [1, 2, 3, 3, 4, 5, 6]
如果想按照其他标准进行排序,sort()方法是可以传入一个函数,函数通过返回一个值来决定
这两个值需不需要交换位置。

例:

arr.sort(function(a,b){
    return a-b;
});

如果a-b > 0,则a和b交换位置。当然这样写出来的话是升序排列。如果要降序排则把a-b改成b-a就

可以实现,就是说b大于a,则b和a交换位置,把大的值排前面。a,b的值就是从arr[0],arr[1]开始比较的,

类似冒泡排序。

当然以上方法是对number数组排序的,如果是string的话则不能用 a-b ,应当如下:

var arr = ["A","cds","esadf","As"];
arr.sort(function(a,b){
    if(a > b){
        return 1;
    }
}); // ["A", "As", "cds", "esadf"]
当然我们也可以用sort()去给json对象数组排序,甚至双重、多重排序。如下例子,我们按学生的
总分排序,如果总分相等,我们再按照语文成绩排序。
var jsonStudents = [
    {name:"Dawson", totalScore:"197", Chinese:"100",math:"97"},
    {name:"HanMeiMei", totalScore:"196",Chinese:"99", math:"97"},
    {name:"LiLei", totalScore:"185", Chinese:"88", math:"97"},
    {name:"XiaoMing", totalScore:"196", Chinese:"96",math:"100"},
    {name:"Jim", totalScore:"196", Chinese:"98",math:"98"},
    {name:"Joy", totalScore:"198", Chinese:"99",math:"99"}];
jsonStudents.sort(function(a,b){
    var value1 = a.totalScore,
        value2 = b.totalScore;
    if(value1 === value2){
        return b.Chinese - a.Chinese;
    }
    return value2 - value1;
});
输出:
  1. 0:{name: "Joy", totalScore: "198", Chinese: "99", math: "99"}
  2. 1:{name: "Dawson", totalScore: "197", Chinese: "100", math: "97"}
  3. 2:{name: "HanMeiMei", totalScore: "196", Chinese: "99", math: "97"}
  4. 3:{name: "Jim", totalScore: "196", Chinese: "98", math: "98"}
  5. 4:{name: "XiaoMing", totalScore: "196", Chinese: "96", math: "100"}
  6. 5:{name: "LiLei", totalScore: "185", Chinese: "88", math: "97"}

当然,如果需要多重排序,只需要在sort传入的函数里在加判断就可以了,这里就不过多赘述。

猜你喜欢

转载自blog.csdn.net/luyuehui520/article/details/82147816