Axel Richter: Array Sortierproblem

Beitrag lesen

Hallo,

Dies Funktion sortiert mir ein Array,

Nun zu meinem Problem: Ich habe z.B. folgendes in dem Array, bereits durch diese Funktion sortiert, stehen:

14|12|Hallo,3|3|Tag,8|6|Nein,9|6|Bla

Denn der erste Eintrag in dem Array (14|12|Hallo) sollte eigentlich das letzte Element des Arrays sein. Sortierung: Zuerst soll nach der 2. Zahl sortiert werden, dann nach der ersten. Die erste ist aber nur wichtig, wenn bei 2 Elementen die 2. Zahl gleich ist.

Wie bekomme ich das nun hin, dass auch Einträge mit Zahlen>9 richtig sortiert werden?

Ein Array ist von sich aus bereits sortierbar. Hier steht das beschrieben. Dort steht auch, dass man für eigene Sortiervorschriften eine Funktion übergeben kann, die einfach nur zwei Arrayelemente vergleichen muss. Das könnte für Dich so

  
var arr = new Array();  
arr[0] = "14|12|Hallo,3|3|Tag,8|6|Nein,9|6|Bla";  
arr[1] = "4|2|Hallo,3|3|Tag,8|6|Nein,9|6|Bla";  
arr[2] = "14|5|Hallo,3|3|Tag,8|6|Nein,9|6|Bla";  
arr[3] = "9|12|Hallo,3|3|Tag,8|6|Nein,9|6|Bla";  
  
function mySort(a,b) {  
 var mySkrit1a = a.split('|')[1]*1;  
 var mySkrit1b = b.split('|')[1]*1;  
 var mySkrit2a = a.split('|')[0]*1;  
 var mySkrit2b = b.split('|')[0]*1;  
 if (mySkrit1a != mySkrit1b) {  
  return mySkrit1a - mySkrit1b;  
 } else if (mySkrit2a != mySkrit2b) {  
  return mySkrit2a - mySkrit2b;  
 } else {  
  return 0;  
 }  
}  
  
arr1 = arr.sort(mySort);  
for (var i=0; i<arr1.length; i++) {  
 document.write(arr1[i] + "<br>")  
}  

aussehen.

Die Variablen mySkrit.. sind die Sortierkriterien (Multiplikation mit 1 macht die Werte numerisch). Unterscheiden sich bereits die mySkrit1a und mySkrit1b, wird nach denen sortiert (siehe Beschreibung in http://de.selfhtml.org/javascript/objekte/array.htm#sort), sind diese gleich, wird nach mySkrit2a und mySkrit2b sortiert.

Das Prinzip gibt es in der Programmiersprache Java auch. Die Funktion bzw. das Objekt, die/das beim Sortieren übergeben wird nennt sich Comparator. Objekte, die so etwas können, heißen comparable.

viele Grüße

Axel