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.
Über den Autor
Software 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
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
JavaScript: Arrays erstellen und nutzen
Info | 0 Kommentare
PHP: Alle leeren Elemente aus String-Array entfernen
Tipp | 0 Kommentare
Lazarus: Datei als Byte-Array laden und Byte-Array als Datei speichern
Tutorial | 0 Kommentare
PHP: Zeit und Performance messen
Tutorial | 0 Kommentare
PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen
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.