带有多个键的JavaScript Array.sort()

时间:2016-04-18 06:18:43

标签: javascript arrays sorting

有人可以帮我解决Array.sort()吗? 我可以对一个值(例如return a < b)进行排序,但不能对更多值进行排序。 我需要这种情况,当一些主要值具有相同的结果时。

E.g。阵列:

var data =    [
        {
            "name": "Paolos Pizza", 
            "rating_count": 20,
            "rating_value": 5,
            "price": 7
        },

        {
            "name": "Bella Italia", 
            "rating_count": 55,
            "rating_value": 3,
            "price": 7
        },

        {
            "name": "Mama Mia", 
            "rating_count": 2,
            "rating_value": 5,
            "price": 99
        },

        {
            "name": "Mario's" ,
            "rating_count": 23,
            "rating_value": 6,
            "price": 7
        },

        {
            "name": "Colazione e Roma" ,
            "rating_count": 52,
            "rating_value": 4,
            "price": 7
        }

    ];

首先,我想对按键price下降的数组进行排序。如果某些条目具有相同的价格,则我希望根据rating_value按升序对其进行排序。如果某些条目具有相同的price和相同的rating_value,则我希望在rating_count上按升序排序。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是你的解决方案:

arr.sort(function(a,b) {
    if(a.price != b.price) return a.price < b.price;
    if(a.rating_value != b.rating_value) return a.rating_value < b.rating_value;
    return a.rating_count < b.rating_count;
});

您可以相应地制作排序方向。

答案 1 :(得分:1)

您可以将比较部分与logical OR ||相关联,并将差异作为sort订单回调的结果。

var array = [{ "name": "Paolos Pizza", "rating_count": 20, "rating_value": 5, "price": 7 }, { "name": "Bella Italia", "rating_count": 55, "rating_value": 3, "price": 7 }, { "name": "Mama Mia", "rating_count": 2, "rating_value": 5, "price": 99 }, { "name": "Mario's", "rating_count": 23, "rating_value": 6, "price": 7 }, { "name": "Colazione e Roma", "rating_count": 52, "rating_value": 4, "price": 7 }];

array.sort(function (a, b) {
    return b.price - a.price ||
        a.rating_value - b.rating_value ||
        a.rating_count - b.rating_count;
});

document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');