Ich kam in Problem der Sortierung Array von Objekten, mit wechselnden Priorität der Werte, im Grunde möchte ich Array von Menschen durch ihr Alter zu sortieren, und dann durch Nachname - oder nur durch Nachname, Name. Ich denke, dass dies die einfachste Lösung im Vergleich zu anderen Antworten ist.
it' wird durch den Aufruf von sortPeoples(['array', 'of', 'properties'], reverse=false) verwendet
///////////////////////example array of peoples ///////////////////////
var peoples = [
{name: "Zach", surname: "Emergency", age: 1},
{name: "Nancy", surname: "Nurse", age: 1},
{name: "Ethel", surname: "Emergency", age: 1},
{name: "Nina", surname: "Nurse", age: 42},
{name: "Anthony", surname: "Emergency", age: 42},
{name: "Nina", surname: "Nurse", age: 32},
{name: "Ed", surname: "Emergency", age: 28},
{name: "Peter", surname: "Physician", age: 58},
{name: "Al", surname: "Emergency", age: 58},
{name: "Ruth", surname: "Registration", age: 62},
{name: "Ed", surname: "Emergency", age: 38},
{name: "Tammy", surname: "Triage", age: 29},
{name: "Alan", surname: "Emergency", age: 60},
{name: "Nina", surname: "Nurse", age: 58}
];
//////////////////////// Sorting function /////////////////////
function sortPeoples(propertyArr, reverse) {
function compare(a,b) {
var i=0;
while (propertyArr[i]) {
if (a[propertyArr[i]] < b[propertyArr[i]]) return -1;
if (a[propertyArr[i]] > b[propertyArr[i]]) return 1;
i++;
}
return 0;
}
peoples.sort(compare);
if (reverse){
peoples.reverse();
}
};
////////////////end of sorting method///////////////
function printPeoples(){
$('#output').html('');
peoples.forEach( function(person){
$('#output').append(person.surname+" "+person.name+" "+person.age+"<br>");
} )
}
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<html>
<body>
<button onclick="sortPeoples(['surname']); printPeoples()">sort by ONLY by surname ASC results in mess with same name cases</button><br>
<button onclick="sortPeoples(['surname', 'name'], true); printPeoples()">sort by surname then name DESC</button><br>
<button onclick="sortPeoples(['age']); printPeoples()">sort by AGE ASC. Same issue as in first case</button><br>
<button onclick="sortPeoples(['age', 'surname']); printPeoples()">sort by AGE and Surname ASC. Adding second field fixed it.</button><br>
<div id="output"></div>
</body>
</html>
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?