2017-05-17 19 views
1

Hier ist mein Array und ich versuche es zu sortieren. Aber es funktioniert nicht wie erwartet. Ich möchte den Namen als absteigend sortieren. Wie kann ich es tun?Jquery Array-Sortierung funktioniert nicht wie erwartet

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>

Hier ist meine Fiddle

+0

Sie können SO Demo verwenden, haben '<>' – guradio

+3

Wenn Sie die Namen absteigend sortieren wollen, warum dann werden Sie durch Bereich Sortier ?! – Bergi

+0

@Bergi, Sorry, es war ein Tippfehler, es entsprechend zu ändern –

Antwort

0

Sie keine mathematischen Operationen auf Strings ausführen können.

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

Wie @bergi in einem Kommentar unten erwähnt. This erklärt das Problem in der Tiefe.

+1

ist es nur mir oder diese Antwort ist von dem angegebenen Link @Bergi – guradio

+0

nur überprüft. Es ist im Grunde das Gleiche, aber es gibt nicht wirklich eine andere Möglichkeit, das zu tun, oder? Ich füge den Link zu meiner Antwort hinzu. –

+0

Wie wäre es 'zurück b.name.localeCompare (a.name)' – Phil

-1

nur Ihre Vergleichsfunktion wie folgt ändern:

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

[Vergessen Sie nicht, "0" wenn angemessen zurückzugeben!] (Http://stackoverflow.com/a/20892652/1048572) – Bergi

+0

@Bergi sollte es langsamer sein oder ?, aber ich bin nur neugierig, jemanden Benchmark es? Wie viel langsamer ist ein "Swap" im Vergleich zu einer "Extra If" -Anweisung? – am05mhz

+0

Die Geschwindigkeit ist mir egal, wenn die Korrektheit beeinträchtigt ist. Die Rückgabe von '0' funktioniert nicht mit doppelten Werten im sortierten Array. – Bergi

Verwandte Themen