Thorsten F.: Array Sortierproblem

Hi,

habe da mal eine Frage:

Dies Funktion sortiert mir ein Array, wobei das Element, welches ich als erstes ausgegeben haben möchte, das letzte Element ist usw.

Funktion:

function bubblesort(array) {
     for(var i = 0; i < array.length; i++) {
    for(var j = 0; j <= array.length - i - 2; j++) {
      if(array[j].split('|')[1] > array[j+1].split('|')[1]) {
     a = array[j];
     array[j] = array[j+1];
     array[j+1] = a;
      }
      if(array[j].split('|')[1] == array[j+1].split('|')[1]) {
     if(array[j].split('|')[0] > array[j+1].split('|')[0]) {
       a = array[j];
       array[j] = array[j+1];
       array[j+1] = a;
     }
      }
    }
     }
     return 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

Die Strings die da drinstehen sind eigentlich egal, denn es soll ausschließlich nach den Zahlen sortiert werden. Wenn die Zahlen alle kleiner als 10 sind, dann funktioniert das auch wunderbar, aber sobald die Zahlen größer als 10 sind, dann wird falsch sortiert.

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?

Grüße,
Thorsten F.

  1. Hat sich bereits alles erledigt. Habe es gerade hinbekommen, in dem ich ein parseInt in den beiden if-Abfragen eingebaut habe.

    Hätte eventuell erstmal selber denken sollen, bevor ich hier was reinschreibe. Sorry dafür.

    Grüße,
    Thorsten F.

  2. Hi,

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

    0 voranstellen?
    var x = (y < 10)? "0" + y : "" + y;
    Jetzt hast Du allerdings einen String, den Du ggf zurückwandeln musst.
    Das Beispiel geht dann bis 99.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. 0 voranstellen?
      var x = (y < 10)? "0" + y : "" + y;

      Ok, das wäre auch eine Lösung gewesen, allerding ja nur bis 99. Ich denke, die parseInt-Lösung ist da das Beste.

      Trotzdem danke.

      Grüße,
      Thorsten F.

  3. 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