grouperArray.sort(function (a, b) {
var aSize = a.gsize;
var bSize = b.gsize;
var aLow = a.glow;
var bLow = b.glow;
console.log(aLow + " | " + bLow);
return (aSize < bSize) ? -1 : (aSize > bSize) ? 1 : 0;
});
Der obige Code sortiert das Array also nach gsize - vom kleinsten zum größten. Es funktioniert gut. Aber wenn die Größe gleich ist, möchte ich, dass sie nach Glühen sortiert wird.
Vielen Dank.
javascript
arrays
Kennzeichen
quelle
quelle
Antworten:
quelle
kürzere Version
quelle
sort an array with a key's value first
und dannsort the result with another key's value
Noch kürzere Version mit Pfeilsyntax!
quelle
Mir ist klar, dass dies vor einiger Zeit gefragt wurde, aber ich dachte, ich würde meine Lösung hinzufügen.
Diese Funktion generiert Sortiermethoden dynamisch. Geben Sie einfach jeden sortierbaren untergeordneten Eigenschaftsnamen an, dem +/- vorangestellt ist, um die aufsteigende oder absteigende Reihenfolge anzuzeigen. Super wiederverwendbar, und es muss nichts über die Datenstruktur wissen, die Sie zusammengestellt haben. Könnte idiotensicher gemacht werden - scheint aber nicht notwendig.
Anwendungsbeispiel:
items.sort (getSortMethod ('- Preis', '+ Priorität', '+ Name'));
Dies würde
items
mit dem niedrigstenprice
zuerst sortieren , wobei die Bindungen zu dem Gegenstand mit dem höchsten gehen würdenpriority
. Weitere Bindungen werden durch den Gegenstand unterbrochenname
Dabei ist items ein Array wie:
Live-Demo: http://gregtaff.com/misc/multi_field_sort/
BEARBEITEN: Problem mit Chrome behoben.
quelle
Ich gehe davon aus, dass der ternäre Operator
((aSize < bSize) ? -1 : (aSize > bSize) ? 1 : 0;)
Sie verwirrt hat. Sie sollten den Link überprüfen, um ihn besser zu verstehen.Bis dahin ist hier Ihr Code vollständig ausgeblasen, wenn / sonst.
quelle
Hier ist eine Implementierung für diejenigen, die etwas allgemeineres wünschen, das mit einer beliebigen Anzahl von Feldern funktioniert.
Grundsätzlich können Sie eine beliebige Anzahl von Eigenschaftsnamen / Sortierrichtungen angeben:
quelle
quelle
quelle
Hier ist eine Implementierung, die Rekursion verwendet, um nach einer beliebigen Anzahl von Sortierfeldern von 1 bis unendlich zu sortieren. Sie übergeben ihm ein Ergebnisarray, das ein Array von zu sortierenden Ergebnisobjekten ist, und ein Sortierarray, das ein Array von Sortierobjekten ist, die die Sortierung definieren. Jedes Sortierobjekt muss einen "Auswahl" -Schlüssel für den Schlüsselnamen haben, nach dem es sortiert, und einen "Ordnungs" -Schlüssel, der eine Zeichenfolge ist, die "aufsteigend" oder "absteigend" anzeigt.
quelle
Hier ist die Lösung für den Fall, dass Sie einen Prioritätssortierschlüssel haben, der in bestimmten Elementen möglicherweise nicht vorhanden ist. Daher müssen Sie nach Fallback-Schlüsseln sortieren.
Ein Beispiel für Eingabedaten ( id2 ist der Prioritätssortierschlüssel):
Und die Ausgabe sollte sein:
Die Komparatorfunktion lautet wie folgt:
PS Wenn .id von .id2 Nullen sein kann, sollten Sie die Verwendung in Betracht ziehen
typeof
.quelle
Ein dynamischer Weg, dies mit mehreren Tasten zu tun:
Verwenden:
quelle
quelle
nicht getestet, aber ich denke das sollte funktionieren.
quelle
Das benutze ich
Konzentrieren Sie die beiden Elemente als Zeichenfolge und sie werden nach einem Zeichenfolgenwert sortiert. Wenn Sie möchten, können Sie _a und _b mit parseInt umschließen, um sie als Zahlen zu vergleichen, wenn Sie wissen, dass sie numerisch sind.
quelle