Ich bin mir zwar bewusst, dass der OP ein Array von Zahlen sortieren wollte, aber diese Frage wurde als Antwort auf ähnliche Fragen zu Zeichenketten markiert. Die obigen Antworten berücksichtigen daher nicht die Sortierung eines Arrays von Text, bei dem die Groß-/Kleinschreibung wichtig ist. Die meisten Antworten nehmen die Zeichenkettenwerte und konvertieren sie in Groß-/Kleinschreibung und sortieren dann auf die eine oder andere Weise. Die Anforderungen, an die ich mich halte, sind einfach:
- Alphabetisch sortieren A-Z
- Großbuchstaben desselben Wortes sollten vor Kleinbuchstaben stehen
- Werte mit demselben Buchstaben (A/a, B/b) sollten in Gruppen zusammengefasst werden.
Was ich erwarte, ist [ A, a, B, b, C, c ]
aber die obigen Antworten ergeben A, B, C, a, b, c
. Ich habe mir tatsächlich länger den Kopf darüber zerbrochen, als ich wollte (deshalb poste ich dies in der Hoffnung, dass es wenigstens einer anderen Person helfen wird). Während zwei Benutzer erwähnen die localeCompare
Funktion in den Kommentaren für die markierte Antwort, das habe ich erst gesehen, nachdem ich beim Suchen auf die Funktion gestoßen bin. Nach dem Lesen die Dokumentation String.prototype.localeCompare() Ich konnte mir dies ausdenken:
var values = [ "Delta", "charlie", "delta", "Charlie", "Bravo", "alpha", "Alpha", "bravo" ];
var sorted = values.sort((a, b) => a.localeCompare(b, undefined, { caseFirst: "upper" }));
// Result: [ "Alpha", "alpha", "Bravo", "bravo", "Charlie", "charlie", "Delta", "delta" ]
Damit wird die Funktion angewiesen, Großbuchstaben vor Kleinbuchstaben zu sortieren. Der zweite Parameter in der localeCompare
Funktion ist es, das Gebietsschema zu definieren, aber wenn Sie es so lassen undefined
wird das Gebietsschema automatisch für Sie ermittelt.
Dies gilt auch für das Sortieren eines Arrays von Objekten:
var values = [
{ id: 6, title: "Delta" },
{ id: 2, title: "charlie" },
{ id: 3, title: "delta" },
{ id: 1, title: "Charlie" },
{ id: 8, title: "Bravo" },
{ id: 5, title: "alpha" },
{ id: 4, title: "Alpha" },
{ id: 7, title: "bravo" }
];
var sorted = values
.sort((a, b) => a.title.localeCompare(b.title, undefined, { caseFirst: "upper" }));