Wenn ich ein Array von Objekten Array 1: [Object 1, Object 2, Object 3]
habe und jedes Objekt wie folgt aussieht:
object 1 has properties : creation date, name, class, size where name = Bear
object 2 has properties : creation date, name, class, size where name = Dog
object 3 has properties : creation date, name, class, size where name = Guerilla
Und ich möchte diese Objekte nach ihren jeweiligen Namen in alphabetischer Reihenfolge sortieren, damit Array 2 wie folgt aussieht: [Object 1 (Bear), Object 2 (Dog), Object 3 (Guerilla)]
Wie würde ich dieses Problem in Javascript angehen? Gibt es dafür bequeme Methoden? Ich bin relativ neu bei JS. Vielen Dank im Voraus!
5 Antworten
Verwenden Sie die Sortiermethode mit einem benutzerdefinierten Vergleicher:
Array1.sort(function(x, y){
var n1 = x.name;
var n2 = y.name;
return n1 == n2 ? 0
: n1 < n2 ? -1
: 1;
});
Die Javascript-Sortiermethode akzeptiert eine anonyme Vergleichsfunktion, die Ihnen die Flexibilität bietet, die Sie zum Sortieren von Objekten nach Attributen benötigen würden.
Das allgemeine Muster lautet:
arr.sort(function(a,b){...});
Die für die Sortiermethode bereitgestellte "anonyme" Funktion akzeptiert zwei zu vergleichende Objekte und sollte wie folgt einen Wert zurückgeben, der angibt, welches Element höher sortiert werden soll:
Wenn a höher als b sortiert werden soll, geben Sie 1
zurück Wenn a niedriger als b sortiert werden soll, geben Sie -1
zurück Wenn a gleich b ist (zu Sortierzwecken), geben Sie 0 zurück
Hier ist ein Beispiel (Ellipsen zeigen andere Attribute an):
var beasties = [
{name:'Bear', created_at: ... },
{name:'Dog', ... },
{name:'Gorilla', ... }
];
beasties.sort(function(a,b){return a.name > b.name});
Hier verlasse ich mich auf die Fähigkeit von js, die Zeichenfolgen zu vergleichen, die vom Attribut name zurückgegeben werden.
Ich denke, das sollte den Trick für dich tun.
Sie können Array.sort eine benutzerdefinierte Vergleichsfunktion übergeben, die dann vom Sortieralgorithmus verwendet wird, um zu entscheiden, welches von zwei Array-Elementen größer ist. Wenn der Algorithmus zwei Objekte vergleicht, übergibt er diese an die Vergleichsfunktion. Wenn die Funktion 1 zurückgibt, wird die erste als größer betrachtet. Wenn -1 zurückgegeben wird, wird der zweite als größer betrachtet. Wenn es 0 zurückgibt, werden sie als gleich betrachtet.
function compare_function(obj1, obj2){
if (obj1.name == obj2.name) return 0;
if (obj1.name < obj2.name) return -1 else return 1;
}
my_array.sort(compare_function)
arr.sort(function (a, b) {
return a.localeCompare(b);
});
Beachten Sie, dass sort
eine in-place -Sortierung ist, sodass Ihr ursprüngliches Array sortiert wird.
Sie können die Sortiermethode des Arrays verwenden und eine Funktion übergeben:
Array1.sort(function(left,right) {
if (left.name < right.name) return -1;
if (left.name > right.name) return 1;
return 0;
});