1238 Stimmen

Array nach Vornamen (alphabetisch) in JavaScript sortieren

Ich habe ein Array (siehe unten für ein Objekt in das Array), die ich brauche, um nach Vorname mit JavaScript zu sortieren. Wie kann ich das tun?

var user = {
   bio: null,
   email:  "user@domain.example",
   firstname: "Anna",
   id: 318,
   lastAvatar: null,
   lastMessage: null,
   lastname: "Nickson",
   nickname: "anny"
};

1966voto

Nachiketha Punkte 19165

Kürzestmöglicher Code mit ES6!

users.sort((a, b) => a.firstname.localeCompare(b.firstname))

String.prototype.localeCompare() Die Grundversorgung ist universell!

1502voto

RiaD Punkte 44903

Angenommen, Sie haben ein Array users . Sie können verwenden users.sort und eine Funktion übergeben, die zwei Argumente annimmt und sie vergleicht (Komparator)

Es sollte zurückgegeben werden

  • etwas Negatives, wenn das erste Argument kleiner als das zweite ist (sollte vor dem zweiten im resultierenden Array platziert werden)
  • etwas Positives, wenn das erste Argument größer ist (sollte nach dem zweiten platziert werden)
  • 0, wenn diese beiden Elemente gleich sind.

In unserem Fall sind zwei Elemente a y b wir wollen vergleichen a.firstname y b.firstname

Beispiel:

users.sort(function(a, b){
    if(a.firstname < b.firstname) { return -1; }
    if(a.firstname > b.firstname) { return 1; }
    return 0;
})

Dieser Code funktioniert mit jedem Typ.

Beachten Sie, dass Sie im "wirklichen Leben"™ beim Vergleich von Zeichenketten oft die Groß- und Kleinschreibung, die korrekte Sortierung von diakritischen Zeichen, seltsame Symbole wie das ß usw. ignorieren wollen, so dass Sie vielleicht die localeCompare . Siehe andere Antworten für mehr Klarheit.

412voto

ovunccetin Punkte 7943

Wenn die verglichenen Zeichenketten Unicode-Zeichen enthalten, können Sie mit localeCompare Funktion von String Klasse wie die folgende:

users.sort(function(a,b){
    return a.firstname.localeCompare(b.firstname);
})

410voto

Mrchief Punkte 72978

Etwa so:

array.sort(function(a, b){
 var nameA = a.name.toLowerCase(), nameB = b.name.toLowerCase();
 if (nameA < nameB) //sort string ascending
  return -1;
 if (nameA > nameB)
  return 1;
 return 0; //default return value (no sorting)
});

45voto

Sam Logan Punkte 2853

Netter kleiner ES6 One-Liner:

users.sort((a, b) => a.firstname !== b.firstname ? a.firstname < b.firstname ? -1 : 1 : 0);

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