JS数组排序sort()方法同时按照两种方式排序的用法

JS数组的sort()方法已经可以满足我们对数组的很多处理需求了,可以对数字、字母、字符串(按照字母)和布尔类型进行排序。

下面是具体的介绍:

  1. 对数字进行排序:
    var arr = [10, 5, 40, 25, 1];
    
    document.write(arr + "<br />");
    document.write(arr.sort());

    输出:

    [10, 5, 40, 25, 1] 
    [1, 10, 25, 40, 5]

    可以看出它并没有按照数字大小进行排序,而是按照字符串的方式(先比较第一位,如果第一位相等依次比较后面的)。

  2. 对数字按照大小进行排序:
    function sortNumber(a,b)
    {
        return a - b
    }
    
    var arr = [10, 5, 40, 25, 1];
    
    document.write(arr + "<br />")
    document.write(arr.sort(sortNumber))

    输出:

    [1, 10, 25, 40, 5]
    [1, 5, 10, 25, 40]

    若a-b大于0,则b排在前面;若a-b小于0,则a排在前面。若想按照降序排序,函数内可改为“return b - a;”。

  3. 对字符串进行排序:
    var arr = ["Alfredo", "Ronald", "salvador", "Alfredo", "Saryn"];
    
    document.write(arr + "<br />");
    document.write(arr.sort());

    输出:

    ["Alfredo", "Ronald", "salvador", "Alfredo", "Saryn"]
    ["Alexander", "Alfredo", "Ronald", "Saryn", "salvador"]

    原理与例1类似。

  4. 同时按照两种方式排序。需求是这样的:“active”为1的排在前面,“active”为0的排在后面,然后分别按照“name”的字母顺序进行排序:
    var arr= [{
        "name"  : "Alfredo",
        "active": 0
    }, {
        "name"  : "Alexander",
        "active": 0
    }, {
        "name"  : "Ronald",
        "active": 1
    }, {
        "name"  : "salvador",
        "active": 0
    }, {
        "name"  : "Saryn",
        "active": 1
    }];
    
    arr.sort(function (a, b) {
        return b.name < a.name;
    }).sort(function (a, b) {
        return b.active - a.active
    });

    输出:

    [{
        "name"  : "Ronald",
        "active": 1
    }, {
        "name"  : "Saryn",
        "active": 1
    }, {
        "name"  : "Alexander",
        "active": 0
    }, {
        "name"  : "Alfredo",
        "active": 0
    }, {
        "name"  : "salvador",
        "active": 0
    }];

    我们是这样处理的:首先按照字母的顺序进行排序,然后把“active”为1的放在前面,“active”为0的放在后面。

原文地址:https://www.cnblogs.com/hiwynn/p/7942632.html