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!

0
Apollo 7 Okt. 2012 im 00:50

5 Antworten

Beste Antwort

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;
});
1
Guffa 6 Okt. 2012 im 22:31

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.

1
cdn 6 Okt. 2012 im 21:20

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) 
0
Philipp 6 Okt. 2012 im 20:58
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.

1
Yoshi 6 Okt. 2012 im 21:01

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;
});
0
slashingweapon 6 Okt. 2012 im 21:00