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"
};

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);

21voto

Peter T. Punkte 2593

underscorejs bietet die sehr schöne Funktion _.sortBy:

_.sortBy([{a:1},{a:3},{a:2}], "a")

oder Sie können eine eigene Sortierfunktion verwenden:

_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})

19voto

Emeeus Punkte 4514

Für den Fall, dass wir Namen oder etwas mit Sonderzeichen sortieren, wie ñ o áéíóú (Commons auf Spanisch) könnten wir die Parameter Lokale ( es für Spanisch in diesem Fall ) und Optionen wie diese:

let user = [{'firstname': 'Az'},{'firstname': 'Áb'},{'firstname':'ay'},{'firstname': 'Ña'},{'firstname': 'Nz'},{'firstname': 'ny'}];

user.sort((a, b) => a.firstname.localeCompare(b.firstname, 'es', {sensitivity: 'base'}))

console.log(user)

Die offiziellen Gebietsschemaoptionen finden Sie hier in iana , es (spanisch), de (deutsch), fr (französisch). Über Empfindlichkeit Basis bedeutet:

Nur Zeichenfolgen, die sich in den Grundbuchstaben unterscheiden, werden als ungleich verglichen. Beispiele: a != b, a = á, a = A.

18voto

James Andrews Punkte 3209

Eine kompaktere Schreibweise:

user.sort(function(a, b){
    return a.firstname === b.firstname ? 0 : a.firstname < b.firstname ? -1 : 1;
})

17voto

Dominic Punkte 55062

Ich bin überrascht, dass niemand Collators erwähnt hat. Sie sollten nicht verwenden localeCompare es sei denn, Sie müssen es tun, da es eine deutlich schlechtere Leistung hat

const collator = new Intl.Collator('zh-CN'); // Chinese Simplified for example

function sortAsc(a, b) {
  if (typeof a === 'string' && typeof b === 'string') {
    return collator.compare(b, a)
  }

  return b - a;
}

function sortDesc(a, b) {
  if (typeof a === 'string' && typeof b === 'string') {
    return collator.compare(a, b);
  }

  return a - b;
}

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