lyrie: Mehrdimensiolales Array sortieren...

Moin!
Ich habe ein kleines Problem ... Ich habe ein Mehrdimensionales Array in dem der Name und sonstige Informationen einer Person enthalten sind (unter anderem auch in Arrays) jetzt schaut es ca. so aus:
// wobei count eine Zählervariable ist, damit ich in meinarray mehrere einträge machen kann

meinarray[count] = new Array();
meinarray[count][0] = "mein name";
meinarray[count][1] = new Array();
meinarray[count][2] = new Array();
meinarray[count][3] = new Array();
meinarray[count][4] = new Array();
meinarray[count][9] = new Array();
meinarray[count][10] = new Array();
meinarray[count][1][0] = "info1";
meinarray[count][1][1] = "info2";
meinarray[count][1][2] = "info3";
meinarray[count][2][0] = "info1";
meinarray[count][2][1] = "info2";
meinarray[count][3][0] = "info1";
meinarray[count][4][0] = "info1";
meinarray[count][5] = "info";
meinarray[count][6] = "info";
meinarray[count][7] = "info";
meinarray[count][8] = "info";
meinarray[count][9][0] = "info1";
meinarray[count][10][0] = "info1";
meinarray[count][10][1] = "info2";

//bisschen abgeändert ;)

ok .. ich möchte nun alle einträge in meinarray nach meinarray[*nummer*][0] sortieren.
ein eintrag im array meinarray besteht jetzt allerdings aus 11 unter-einträgen, die beim sortieren mitgenommen werden sollen. wie mache ich das?

  1. Hallo,

    Ich habe ein kleines Problem ... Ich habe ein Mehrdimensionales Array in dem der Name und sonstige Informationen einer Person enthalten sind (unter anderem auch in Arrays) jetzt schaut es ca. so aus:
    meinarray[count] = new Array();
    meinarray[count][0] = "mein name";
    meinarray[count][1] = new Array();

    ...

    meinarray[count][10][0] = "info1";
    meinarray[count][10][1] = "info2";

    ok .. ich möchte nun alle einträge in meinarray nach meinarray[*nummer*][0] sortieren.

    Du kennst die Methode Array.sort() und deren Erweiterbarkeit mit einer Sortierfunktion? http://de.selfhtml.org/javascript/objekte/array.htm#sort

    Zum besseren Verständnis, wie das auf mehrdimensionale Arrays anwendbar ist, kann ich Dir mein Standardbeispiel hierfür geben:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <title>Array-Multisort</title>
    <script type="text/javascript">
    <!--
    var dsatz;
    var adressen = new Array();
    dsatz = new Array("Müller", "Paul", "Bremen");
    adressen[0] = dsatz;
    dsatz = new Array("Adam", "Karla", "München");
    adressen[1] = dsatz;
    dsatz = new Array("Bertram", "Judit", "Aachen");
    adressen[2] = dsatz;
    dsatz = new Array("Adam", "Berta", "Chemnitz");
    adressen[3] = dsatz;
    dsatz = new Array("Albert", "Maria", "Köln");
    adressen[4] = dsatz;

    function nachNachname(a,b) {
      if  (a[0]>b[0]) return 1
      else if (a[0]<b[0]) return -1
      else return 0;
    }

    function nachVorname(a,b) {
      if  (a[1]>b[1]) return 1
      else if (a[1]<b[1]) return -1
      else return 0;
    }

    function nachOrt(a,b) {
      if  (a[2]>b[2]) return 1
      else if (a[2]<b[2]) return -1
      else return 0;
    }

    adressen.sort(nachNachname);

    //-->
    </script>
    </head>
    <body>
    <script type="text/javascript">
    <!--
    document.writeln("<table border="1">");
    for (var i=0; i<adressen.length; i++) {
      document.writeln("<tr>");
      document.writeln("<td>" + adressen[i][0] + "</td><td>" + adressen[i][1] + "</td><td>" + adressen[i][2] + "</td>");
      document.writeln("</tr>");
    }
    document.writeln("</table>");
    //-->
    </script>
    </body>
    </html>

    viele Grüße

    Axel

    1. Du kennst die Methode Array.sort() und deren Erweiterbarkeit mit einer Sortierfunktion? http://de.selfhtml.org/javascript/objekte/array.htm#sort

      Ja die kenne ich ... allerdings hab ich bis jetzt die Sortierfunktion nicht ganz verstanden ... ich weis nur das sie 1,0 oder -1 zurückgeben muss, sonst eigentlich nichts.

      Nach dem beispiel hab ichs glaube ich kapiert... man muss nur eine Sortierfunktion schreiben, die die daten aus dem weiteren array aus liest. wenn cih jetzt bei den sortierfunktionen das < oder > vertausche sortiert er in "die andere richtung" oder?

      1. Hallo,

        Du kennst die Methode Array.sort() und deren Erweiterbarkeit mit einer Sortierfunktion? http://de.selfhtml.org/javascript/objekte/array.htm#sort
        Ja die kenne ich ... allerdings hab ich bis jetzt die Sortierfunktion nicht ganz verstanden ... ich weis nur das sie 1,0 oder -1 zurückgeben muss, sonst eigentlich nichts.

        Richtig. Den Rest macht die Funktion Array.sort(). Ist der Rückgabewert größer als 0, so bedeutet das, der Parameter a hat einen höheren Index als der Parameter b. In der Sortierreihenfolge kommt damit b vor a. Ist der Rückgabewert kleiner als 0, so bedeutet das, der Parameter a hat einen niedrigeren Index als der Parameter b. In der Sortierreihenfolge kommt damit a vor b. Tritt der Rückgabewert 0 ein, so sind beide Elemente gleich und brauchen in ihrer Reihenfolge nicht verändert werden.

        Nach dem beispiel hab ichs glaube ich kapiert... man muss nur eine Sortierfunktion schreiben, die die daten aus dem weiteren array aus liest.

        ... und vergleicht. Die beiden Argumente a und b der Beispielfunktion nachNachname(a, b) enthalten je ein komplettes Element des Arrays, welches mit .sort(nachNachname) sortiert wird. Wenn dieses Array als Elementinhalt wiederum Arrays enthält, dann enthält a und b auch diese.

        wenn cih jetzt bei den sortierfunktionen das < oder > vertausche sortiert er in "die andere richtung" oder?

        Ja. Du musst aber _immer_ beide Vergleiche umkehren, also:
        aufsteigend:
        function nachNachname(a,b) {
          if  (a[0]>b[0]) return 1
          else if (a[0]<b[0]) return -1
          else return 0;
        }

        abfallend:
        function nachNachname(a,b) {
          if  (a[0]<b[0]) return 1
          else if (a[0]>b[0]) return -1
          else return 0;
        }

        viele Grüße

        Axel

        1. Nochmal hallo und danke!

          Ja. Du musst aber _immer_ beide Vergleiche umkehren, also:

          Schon klar ;)

          nochmal danke für die Hilfe
          MFG
          lyrie