88 Stimmen

JavaScript: Array mit Zahlen sortieren

Tutorial von Stefan Trost | Letztes Update am 23.11.2023 | Erstellt am 23.10.2011

JavaScript macht es uns einfach, einen Array zu sortieren. Wenn wir einen beliebigen Array haben, reicht es, die Funktion sort() in folgender Art und Weise aufzurufen, um den Array zu sortieren:

var ArrA = ['D','A','C','B'];
ArrA.sort();
alert(ArrA);
//Ausgabe: 'A,B,C,D'

Probleme gibt es aber, wenn wir einen Array mit Zahlen haben. Was passiert, wenn wir die Funktion von oben auf einen Array mit Zahlen anwenden?

var ArrB = [120,30,22,4,60];
ArrB.sort();
alert(ArrB);
//Ausgabe: '120,22,30,4,60'

Scheinbar sind die Zahlen nicht richtig sortiert worden. Das Problem liegt in der lexikalischen Sortierweise von der Funktion sort(). Sort() schaut sich als erstes den ersten Buchstaben der Zeichenkette an, die ihm übergeben wird und ordnet die Zeichenketten danach entsprechend der weiteren Buchstaben.

Im Beispiel mit ArrB kommt entsprechend als erstes das Element 120, danach die 22 und danach die 30, weil das erste Zeichen dieser Zeichenketten 1, 2 und 3 ist.

Array numerisch sortieren

Man kann sort() als Parameter eine Funktion übergeben, die bestimmt, wie sortiert werden soll. Genau das brauchen wir nun, um selber zu definieren, wie zwei Elemente sortiert werden sollen. Wir schauen uns dazu die folgenden Beispiele an:

var ArrC = [120,30,22,4,60];

//Beispiel 1
ArrC.sort(function(a,b){return a-b});
alert(ArrC); //Ausgabe: 4,22,30,60,120 

//Beispiel 2
ArrC.sort(function(a,b){return b-a});
alert(ArrC); //Ausgabe: 120,60,30,22,4

//Beispiel 3
function SortNum (a,b) { return a-b; }

ArrC.sort(SortNum);
alert(ArrC); //Ausgabe 4,22,30,60,120

ArrC.reverse();
alert(ArrC); //Ausgabe: 120,60,30,22,4

Im ersten Beispiel übergeben wir als Parameter bei sort() eine Funktion. Die übergebene Funktion muss zwei Parameter entgegennehmen können. Beim Sortiervorgang wird dann die Funktion immer mit den zwei Werten aufgerufen, die gerade miteinander verglichen werden. Die Funktion kann nun 0 oder positive oder negative Werte zurückgeben. Ist der zurückgegebene Wert größer als 0, so ist a höher einzusortieren als b. Ist der zurückgegebene Wert kleiner als 0, so ist b höher einzusortieren als a. Falls der zurückgegebene Wert 0 ist, so sind a und b identisch. Und genau das leistet unsere Funktion "return a-b" und wir erhalten einen aufsteigend sortierten Array zurück.

In Beispiel 2 haben wir statt "a-b", "b-a" geschrieben. Damit dreht sich der Array um und wir erhalten einen absteigend sortierten Array zurück.

Beispiel 3 zeigt eine alternative Möglichkeit, genau dasselbe zu erreichen: Wir haben die Funktion "NumSort" zunächst definiert und rufen sie dann später auf - wir brauchen die Funktion also nicht in die Klammern hineinzuschreiben sondern können sie auch außerhalb definieren. Das hat den Vorteil bei sehr großen Funktionen, die wir auch noch mehrfach aufrufen. Mit der Funktion reverse() kann man den Array komplett spiegeln. Das machen wir danach, um unsere absteigende Sortierung zu erreichen. So brauchen wir auch nicht extra eine gegenteilige Funktion zu definieren.

Beliebige Sortierfunktionen

Das Beispiel zeigt: Als Sortierfunktion können wir nicht nur einfache Funktionen wie "a-b" benutzen. Es sind auch beliebige andere Funktionen möglich, die je nachdem ob die verglichenen Elemente gleich, größer oder kleiner sind, 0, einen positiven oder einen negativen Wert zurückgeben.

Lassen Sie Ihrer Phantasie freien Lauf und erstellen Sie je nach Bedarf, zum Beispiel mit if-Verschachtelungen, die Sortierfunktion, die Sie benötigen.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

PHP: Zeit und Performance messen

Tutorial | 0 Kommentare

Delphi: Systemweiter HotKey

Tutorial | 3 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.