2017-05-17 58 views
1

这是我的数组,我试图对它进行排序。但它没有按预期工作。我想按降序对名称进行排序..我该怎么做?jquery数组排序不按预期工作

var d = '{"success":"1","message":[{"_id":"591b39df358f1d1f843231d1","area":"chennai","food":"idly","name":"saravana bavan","__v":0},{"_id":"591b39e0358f1d1f843231d2","area":"Dindigul","food":"Dosa","name":"Kattu Briyani","__v":0},{"_id":"591b39df358f1d1f843231d4","area":"Tirupur","food":"Poori","name":"French Loaf","__v":0}]}'; 
 
console.log(d); 
 
var results = jQuery.parseJSON(d); 
 
console.log(results.message); 
 
results.message.sort(function(a, b) { 
 
    return b.name- a.name; 
 
}); 
 
console.log(results.message);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

这是我Fiddle

+0

您可以使用SO具有演示'<>' – guradio

+3

如果你想的名字降序排序,那么你为什么排序按面积? – Bergi

+0

@Bergi,抱歉,这是一个错字,相应地改变它 –

回答

0

你不能对字符串进行数学运算。

results.message.sort(function(a, b) { 
    if (b.name > a.name) { return 1 } 
    else if (b.name < a.name) { return -1 } 
    else { return 0 } 
}); 

由于@bergi在下面的评论中提到。 This深入解释了这个问题。

+1

只是我或这个答案是从@Bergi给出的链接 – guradio

+0

刚刚检查。它基本上是一样的东西,但是没有其他方法可以做到这一点吗?我将添加链接到我的答案。 –

+0

如何返回b.name.localeCompare(a.name)' – Phil

-1

只是改变你的比较功能如下:

var d = '{"success":"1","message":[{"_id":"591b39df358f1d1f843231d1","area":"chennai","food":"idly","name":"saravana bavan","__v":0},{"_id":"591b39e0358f1d1f843231d2","area":"Dindigul","food":"Dosa","name":"Kattu Briyani","__v":0},{"_id":"591b39df358f1d1f843231d4","area":"Tirupur","food":"Poori","name":"French Loaf","__v":0}]}'; 
console.log(d); 
var results = jQuery.parseJSON(d); 
console.log(results.message); 
results.message.sort(function(a, b) { 
    return b.name.toLowerCase() > a.name.toLowerCase() ? 1 : -1; 
}); 
console.log(results.message); 
+0

[不要忘记在适当的时候返回'0'!](http://stackoverflow.com/a/20892652/1048572) – Bergi

+0

@Bergi它应该是更慢的权利?,但我只是好奇,有人有基准吗? “交换”与“额外if”陈述相比要慢多少? – am05mhz

+0

正确性受损时,我不关心速度。不返回'0'不适用于排序数组中的重复值。 – Bergi