Ich habe ein Array (siehe unten für ein Objekt im Array), das ich mit JavaScript nach Vorname sortieren muss. Wie kann ich es tun?
var user = {
bio: null,
email: "[email protected]",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
javascript
Jonathan Clark
quelle
quelle
Antworten:
Angenommen, Sie haben ein Array
users
. Sie könnenusers.sort
eine Funktion verwenden und übergeben, die zwei Argumente verwendet und diese vergleicht (Komparator).Es sollte zurückkehren
In unserem Fall, wenn zwei Elemente sind
a
undb
wir vergleichen wollena.firstname
undb.firstname
Beispiel:
Dieser Code funktioniert mit jedem Typ.
Beachten Sie, dass Sie in "real life" ™ beim Vergleichen von Zeichenfolgen häufig Groß- und Kleinschreibung ignorieren, diakritische Zeichen, seltsame Symbole wie ß usw. korrekt sortieren möchten
localeCompare
. Weitere Antworten finden Sie zur Klarheit.quelle
localeCompare
von ovunccetin mit verwenden .Kürzester Code mit ES6!
Die grundlegende Unterstützung von String.prototype.localeCompare () ist universell!
quelle
Etwas wie das:
quelle
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
höher als die Zeichenfolge sortiert. Dies geschieht'apple'
, wenn Sie die nicht verwenden.toLowerCase()
.'Z' < 'a' // true
und'z' < 'a' // false
Wenn im Vergleich Strings Unicode - Zeichen enthalten können Sie mit
localeCompare
Funktion derString
Klasse wie folgt aus :quelle
users.sort((a, b) => a.name.localeCompare(b.name))
Netter kleiner ES6 Einzeiler:
quelle
Wir können localeCompare verwenden, müssen aber auch die Schlüssel auf Falsey-Werte überprüfen
Der folgende Code funktioniert nicht, wenn in einem Eintrag lname fehlt.
Wir müssen also wie unten nach dem Falsey-Wert suchen
ODER
Wir können Lodash verwenden, es ist sehr einfach. Es erkennt die zurückgegebenen Werte, dh ob Zahl oder Zeichenfolge, und sortiert entsprechend.
https://lodash.com/docs/4.17.5#sortBy
quelle
underscorejs bietet die sehr schöne Funktion _.sortBy:
oder Sie können eine benutzerdefinierte Sortierfunktion verwenden:
quelle
sortBy
Erkennung der zurückgegebenen Werte Zeichenfolgen und führt daher eine alphabetische Sortierung durch? Vielen DankWenn wir Namen oder etwas mit Sonderzeichen wie ñ oder áéíóú (Commons auf Spanisch) sortieren, können wir die params- Gebietsschemas ( in diesem Fall es für Spanisch) und folgende Optionen verwenden :
Die offiziellen Gebietsschemaoptionen finden Sie hier in iana , es (Spanisch), de (Deutsch), fr (Französisch). Über Empfindlichkeit Basismittel:
quelle
Grundsätzlich können Sie Arrays mit der Methode sort sortieren. Wenn Sie jedoch Objekte sortieren möchten, müssen Sie die Funktion übergeben, um die Methode des Arrays zu sortieren. Daher werde ich Ihnen ein Beispiel für die Verwendung Ihres Arrays geben
quelle
else
nicht entfernt werden? Sonstreturn 0
wird das nie gelesenInspiriert von dieser Antwort,
quelle
Eine kompaktere Notation:
quelle
sign(f(a, b)) =-sign(f(b, a))
(für a = b)a.firstname == b.firstname
sollte der===
VollständigkeitAuch für asec und desc sort können Sie Folgendes verwenden: Angenommen, wir haben eine Variable SortType , die die gewünschte aufsteigende oder absteigende Sortierung angibt:
quelle
Eine verallgemeinerte Funktion kann wie folgt geschrieben werden
Sie können die folgenden Parameter übergeben
quelle
Versuchen
Code-Snippet anzeigen
quelle
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
Sie können dies für Objekte verwenden
quelle
In einfachen Worten können Sie diese Methode verwenden
quelle
Sie können die eingebaute Array-Methode - verwenden
sort
. Diese Methode verwendet eine Rückrufmethode als ParameterWichtige Punkte zum Verständnis dieses Codes.
myCustomSort
sollte die benutzerdefinierte Methode für jedes Elementpaar (aus dem Eingabearray) einen Vergleich von +1 oder -1 zurückgeben.toLowerCase()
/toUpperCase()
in der benutzerdefinierten Sortierrückrufmethode, damit der Unterschied zwischen Groß- und Kleinschreibung die Richtigkeit des Sortiervorgangs nicht beeinträchtigt.Ich hoffe, das ist klar genug. Fühlen Sie sich frei zu kommentieren, wenn Sie denken, dass weitere Informationen benötigt werden.
Prost!
quelle
Schob die Top-Antworten in einen Prototyp, um nach Schlüssel zu sortieren.
quelle
Sie können etwas Ähnliches verwenden, um die Groß- und Kleinschreibung zu entfernen
quelle
Meine Implementierung funktioniert hervorragend in älteren ES-Versionen:
quelle
Nur für den Datensatz, wenn Sie eine benannte Sortierfunktion haben möchten, lautet die Syntax wie folgt:
Beachten Sie, dass Folgendes NICHT funktioniert:
quelle