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

标签 javascript arrays sorting

<分区>

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

例如数组:

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 上升序排序.

我该如何解决这个问题?

最佳答案

您可以使用 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>');

关于带有多个键的 JavaScript Array.sort(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686703/

相关文章:

JavaScript ES7 - 在页面顶部调用异步函数,在底部等待

javascript - 在打开使用保存的 html 的报告之前在服务器端保存 html 在 Safari 上不起作用

javascript - KnockoutJs ko.utils.arrayFirst 不允许重复值作为结果

c++ - srand(time(0)) 和 rand() 导致堆栈溢出错误

javascript - Either|Or 正则表达式的一部分,用于匹配两种可能性

c++ - 数组索引循环开始而不是内存访问错误

ios - NSURLSession.sharedSession().dataTaskWithRequest 函数运行缓慢

java - 如何对预排序 TreeSet 中对象的某些属性进行排序?

java - 将矩形的四个点重新排序为正确的顺序

arrays - 从矩阵matlab中选取最有值(value)的元素