有人可以帮我解决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
上按升序排序。
我该如何解决这个问题?
答案 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>');