Hers eine Funktion, die Sie verwenden können, um die Liste nach mehreren Objekten zu sortieren, wobei, wenn das erste Objekt gleich ist, die zweite Reihenfolge als Fallback verwendet wird. leere Werte sollten auch ignoriert werden, um Fallback Reihenfolge, wenn möglich.
function sortObjects(list, orderBy){
list.sort(function(a, b){
let byIndex = 0;
let order = orderBy[byIndex];
while(!a[order.by] || !b[order.by] || a[order.by] === b[order.by]){
byIndex++;
if(byIndex >= orderBy.length){break;}
order = orderBy[byIndex];
}
if(!a[order.by] || !b[order.by] || a[order.by] === b[order.by]){
return false;
}
if(order.desc){
return a[order.by] < b[order.by];
}
return a[order.by] > b[order.by];
});
return list;
}
Verwendung:
var objs = [
{a: 10, b: 20, c: 30},
{a: 30, b: 10, c: 20},
{a: 20, b: 10, c: 30},
];
sortObjectList(objs, [{by: 'a'}]);
[
{a: 10, b: 20, c: 30},
{a: 20, b: 10, c: 30},
{a: 30, b: 10, c: 20},
]
sortObjectList(objs, [{by: 'a', desc: true}]);
[
{a: 30, b: 10, c: 20},
{a: 20, b: 10, c: 30},
{a: 10, b: 20, c: 30},
]
sortObjectList(objs, [{by: 'b', desc: true}, {by: 'c'}]);
[
{a: 10, b: 20, c: 30},
{a: 30, b: 10, c: 20},
{a: 20, b: 10, c: 30},
]
ein weiteres Beispiel:
var objs = [
{a: 5, b: 5},
{a: 10, b: 15},
{a: 15, b: 25},
{b: 10},
{b: 20},
{a: 10, b: 30},
{a: 10, b: 12},
];
sortObjectList(objs, [{by: 'a'}, {by: 'b'}]);
[
{a: 5, b: 5},
{b: 10},
{a: 10, b: 12},
{a: 10, b: 15},
{b: 20},
{a: 10, b: 30},
{a: 15, b: 25},
]
8 Stimmen
Mit diesem Skript können Sie genau das tun, es sei denn, Sie möchten Ihre eigene Vergleichsfunktion oder Ihren eigenen Sortierer schreiben: thomasfrank.se/sortierung_der-dinge.html
0 Stimmen
Der schnellste Weg ist die Verwendung der isomorphen sort-array Modul, das nativ sowohl im Browser als auch im Node funktioniert und jede Art von Eingabe, berechnete Felder und benutzerdefinierte Sortierreihenfolgen unterstützt.
0 Stimmen
Function compare( a, b ) { if ( a.last_nom < b.last_nom ){ return -1; } if ( a.last_nom > b.last_nom ){ return 1; } return 0; } objs.sort( compare );
0 Stimmen
Objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.letzte_Nom > a.letzte_Nom) ? -1 : 0))
0 Stimmen
@artem Bitte reichen Sie Ihre eigene Antwort ein.
2 Stimmen
@RobertTalada das ist meine Antwort stackoverflow.com/a/67021585/7012450
0 Stimmen
Das Muster für Sortierung nach Eigenschaften lexikographisch ist
objs.sort((a, b) => a.last_nom.localeCompare(b.last_nom))
. Zum Sortieren numerisch verwendena.prop - b.prop
. Um absteigend statt aufsteigend zu sortieren, negieren Sie den Rückgabewert (z. B.b.last_nom.localeCompare(a.last_nom)
anstelle vona.last_nom.localeCompare(b.last_nom)
). Zum Sortieren nach mehrere Objekte , Kette andere Sorten mit||
z.B.b.someNumber - a.someNumber || a.someString.localeCompare(b.someString)
.2 Stimmen
Groß-/Kleinschreibung beachten oder nicht beachten?