15 Stimmen

Sortierung von JSON (nach speziellem Element) alphabetisch

Ich habe einige JSON-Daten, die wie folgt formatiert sind:

places =[
     {
      "city":"Los Angeles",
      "country":"USA",
     },
     {
      "city":"Boston",
      "country":"USA",
     },
     {
      "city":"Chicago",
      "country":"USA",
     },
] 

usw...

Ich versuche, dies alphabetisch NACH STADT zu sortieren und habe Schwierigkeiten dabei. Ich glaube, die Wurzel meines Problems liegt darin, die Reihenfolge der Buchstaben (anstatt der Zahlen) zu bestimmen. Ich habe es mit Folgendem versucht:

    places.sort(function(a,b) {
     return(a.city) - (b.customInfo.city);
    });

trotzdem weiß diese Subtraktion nicht, was sie tun soll. Kann mir jemand helfen?

43voto

Matti Virkkunen Punkte 61148

Leider gibt es keine generische "vergleichen" Funktion in JavaScript, um einen geeigneten Wert für sort() zurückzugeben. Ich würde eine compareStrings Funktion schreiben, die Vergleichsoperatoren verwendet und sie dann in der sort Funktion verwenden.

function compareStrings(a, b) {
  // Annahme: Sie möchten eine Vergleichsfunktion ohne Beachtung der Groß- und Kleinschreibung
  a = a.toLowerCase();
  b = b.toLowerCase();

  return (a < b) ? -1 : (a > b) ? 1 : 0;
}

places.sort(function(a, b) {
  return compareStrings(a.city, b.city);
})

16voto

Michael Geary Punkte 27531

Die Lösung von Matti ist korrekt, aber du kannst sie einfacher schreiben. Du brauchst den zusätzlichen Funktionsaufruf nicht; du kannst die Logik direkt im sort-Rückruf platzieren.

Für eine sortierung ohne Beachtung der Groß- und Kleinschreibung:

places.sort( function( a, b ) {
    a = a.city.toLowerCase();
    b = b.city.toLowerCase();

    return a < b ? -1 : a > b ? 1 : 0;
});

Für eine sortierung mit Berücksichtigung der Groß- und Kleinschreibung:

places.sort( function( a, b ) {
    return a.city < b.city ? -1 : a.city > b.city ? 1 : 0;
});

1voto

Sakar Punkte 31

Im Kontext des Sortierens von Städten, insbesondere wenn wir sie von einer API oder einer anderen Quelle abrufen, in der keine doppelten Städtenamen erwartet werden, können wir die Sortierfunktion zur besseren Lesbarkeit vereinfachen.

places.sort(function (a, b) {
     return a.city < b.city ? -1 : 1;
});

Hier sagen wir im Wesentlichen: Wenn a.city alphabetisch vor b.city kommt, dann platzieren wir a vor b im sortierten Array. Andernfalls platzieren wir b vor a.

Auch wenn es unwahrscheinlich ist, dass doppelte Städtenamen existieren, wird diese Funktion trotzdem funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X