Bernhard Wagner: zweidimensionales Array sortieren

Hallo,
habe eine Datenbank (1936 Datensätze) in ein zweidimensionales Array übertragen,sieht so aus:
z[1]= new Array(5);
z[1][0]= "Achsnich"
z[1][1]= "Agnes"
z[1][2]= ""
z[1][3]= "Bahnhofstr."
z[1][4]= "206"
nun möchte ich das Array nach den Hausnummern sortieren (z[1][4]). Mit "sort()" läßt sich nur das ganze Array sortieren. Hat jemand eine Idee?
Gruß Bernhard

  1. Moin,

    Mit "sort()" läßt sich nur das ganze Array sortieren.

    Nope. Sort ohne Parameter sortiert nur das ganze Array.
    Du kannst aber selber eine Sortier-Funktion als Parameter angeben,
    die dann das Array so sortiert, wie Du willst.

    Siehe http://de.selfhtml.org/javascript/objekte/array.htm#sort.

    Grüße,
    Jörg

    1. Hallo Jörg,

      Nope. Sort ohne Parameter sortiert nur das ganze Array.
      Du kannst aber selber eine Sortier-Funktion als Parameter angeben,
      die dann das Array so sortiert, wie Du willst.

      keine Sortier-, sonder eine Vergleichsfunktion.
      @Bernhard: Ein Beispiel findest du hier: http://www.j-berkemeier.de/TableSort.html

      Gruß, Jürgen

      1. Hallo Jürgen,
        danke für Deine Antwort. Den Link schau ich mir noch mal genauer an.
        Gruß Bernhard

    2. Moin,

      Mit "sort()" läßt sich nur das ganze Array sortieren.

      Nope. Sort ohne Parameter sortiert nur das ganze Array.
      Du kannst aber selber eine Sortier-Funktion als Parameter angeben,
      die dann das Array so sortiert, wie Du willst.

      Siehe http://de.selfhtml.org/javascript/objekte/array.htm#sort.

      Grüße,
      Jörg

      Hallo Jörg,
      danke für die Antwort, den Link kenne ich aber da wird nur Bezug auf eindimensionale Array´s genommen, das hilft mir leider nicht wirklich.
      Gruß Bernhard

      1. hi,

        den Link kenne ich aber da wird nur Bezug auf eindimensionale Array´s genommen, das hilft mir leider nicht wirklich.

        Doch, täte es, wenn du ein wenig darüber nachdenkst.

        Den _Vergleich_ anhand einer Eigenschaft "in der zweiten Dimension" zu machen, wäre ja Aufgabe deiner Vergleichsfunktion.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo wahsaga,
          ich danke dir, du bist eine große Hilfe. Dein Genius leuchtet über dem ganzen Forum. Aber keine Angst, ich habe das Problem inzwischen selbst gelöst, auf sehr unkonventionelle Art.
          Gruß Bernhard

          1. ich danke dir, du bist eine große Hilfe. Dein Genius leuchtet über dem ganzen Forum. Aber keine Angst, ich habe das Problem inzwischen selbst gelöst, auf sehr unkonventionelle Art.

            Wieso?

            Deine einzige gedankliche Transferleistung wäre es gewesen, zu sehen, dass bei:

            function mySort(a, b) { ... }

            jeweils das zu vergleichende Element aus deiner Liste übergeben wird.

            Also ist das einzige was du tun musst, in deiner Sortierfunktion auf das von dir gewünschte Elemten zu zugreifen

              
            <script type="text/javascript">  
            function mySort(a, b)  
            {  
                return a[4] > b[4] ? 1 :  
                a[4] < b[4] ? -1 :  
                0;  
            }  
            var z = [  
            ["Achsnich", "Agnes", "", "Bahnhofstr.", "214"],  
            ["Achsnich", "Agnes", "", "Bahnhofstr.", "206"],  
            ["Achsnich", "Agnes", "", "Bahnhofstr.", "204"],  
            ["Achsnich", "Agnes", "", "Bahnhofstr.", "201"]  
            ];  
            var new_arr = z.sort(mySort);  
            alert(new_arr.join('\n'));  
            </script>  
            
            

            Einfach, oder?

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Hell-O!

              function mySort(a, b)
              {
                  return a[4] > b[4] ? 1 :
                  a[4] < b[4] ? -1 :
                  0;
              }

              Das könnte schief gehen:
              http://forum.de.selfhtml.org/archiv/2005/1/t98643/#m601461

              Siechfred

              --
              Hier könnte Ihre Werbung stehen.
              [remote-signature:http://www.anaboe.net/remsig.php]
              1. function mySort(a, b)
                {
                    return a[4] > b[4] ? 1 :
                    a[4] < b[4] ? -1 :
                    0;
                }

                Das könnte schief gehen:
                http://forum.de.selfhtml.org/archiv/2005/1/t98643/#m601461

                Wieso?
                In dem von dir genanntenThread, wird mit a - b sortiert, genau das tu ich ja hier nicht.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Das könnte schief gehen:
                  http://forum.de.selfhtml.org/archiv/2005/1/t98643/#m601461
                  Wieso?

                  Heißa, vergaloppiert :-)

                  Siechfred

                  --
                  Hier könnte Ihre Werbung stehen.
                  Viel Lärm um nichts || Steuerliche Einordnung des Rangrücktritts
            2. Hallo Struppi,
              herzlichen Dank für Deine Antwort, aber entweder verstehe ich dabei was nicht oder es ist doch nicht ganz so einfach. Dein Beispiel bezieht sich doch wieder nur auf ein eindimensionales Array oder ich seh den Wald vor Bäumen nicht. Ich muß es mir noch mal langsam durch den Kopf gehen lassen. Meine Lösung ist komplizierter, kommt aber auch zum Ziel, der Haken bei der Sache ist, daß das zu sortierende Feld nicht nur Zahlen als Hausnummern enthält, sondern z.B. auch 106b; jedenfalls trotzdem noch mal Danke.
              Gruß Bernhard

              1. herzlichen Dank für Deine Antwort, aber entweder verstehe ich dabei was nicht oder es ist doch nicht ganz so einfach. Dein Beispiel bezieht sich doch wieder nur auf ein eindimensionales Array oder ich seh den Wald vor Bäumen nicht. Ich muß es mir noch mal langsam durch den Kopf gehen lassen. Meine Lösung ist komplizierter, kommt aber auch zum Ziel, der Haken bei der Sache ist, daß das zu sortierende Feld nicht nur Zahlen als Hausnummern enthält, sondern z.B. auch 106b; jedenfalls trotzdem noch mal Danke.

                Nein das Beispiel ist ein Mehrdimensonales Array. Dir ist diese Schreibweise vermutlich nicht bekannt:

                var x = [];
                entspricht
                var x = new Array();

                und dementsprechend erzeugt das:
                var x = [
                [.....],
                [.....],
                [.....],
                [.....]
                ];

                ein zweidimensonales Array.

                Das das Feld Zahlen und Buchstaben enthält ist mit meimem Beispiel kein Problem, da die Vergleiche > und < auch mit Strings funktionieren. Also soweit ich das getestet hatte sortiert JS das Array schön nach der Hausnummer.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Hallo Struppi,
                  das habe ich jetzt verstanden. Die Schreibweise kannte ich wirklich nicht. Ich bin ein sehr versierter Javascript-Programmierer, das bedeutet, ich habe nicht wirklich viel Ahnung und muß mir die Sachen zusammenstoppeln, also noch mal ein ganz dickes Dankeschön, das hat wirklich geholfen.
                  Gruß Bernhard

                2. Hallo Struppi,
                  ich hab´s gleich mal ausprobiert, es klappte hervorragend, für künftige Sachen weiß ich jetzt mehr. Allerdings mußte ich für mein spezielles Problem meine komplizierte Variante nehmen, da das Feld wegen der enthaltenen Buchstaben als String sortiert wurde, also nach der 1 die 10.
                  Gruß Bernhard

                  1. ich hab´s gleich mal ausprobiert, es klappte hervorragend, für künftige Sachen weiß ich jetzt mehr. Allerdings mußte ich für mein spezielles Problem meine komplizierte Variante nehmen, da das Feld wegen der enthaltenen Buchstaben als String sortiert wurde, also nach der 1 die 10.

                    Naja, selbst das wäre lösbar. Der Punkt war ja, dass du sowohl Zahlen als auch Buchstaben hast. du musst die Sortierfunktiopn nur entsprechend Anspassen:

                      
                    <script type="text/javascript">  
                    function mySort(a, b)  
                    {  
                        var tmp1 = parseInt( a[4] );  
                        var tmp2 = parseInt( b[4] );  
                        return tmp1 > tmp2 ? 1 :  
                        tmp1 < tmp2 ? -1 :  
                        a[4] > b[4] ? 1 :  
                        a[4] < b[4] ? -1 :  
                        0;  
                    }  
                    var z = [  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "1"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "10"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "2c"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "2"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "10c"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "2a"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "10b"],  
                    ["Achsnich", "Agnes", "", "Bahnhofstr.", "10a"]  
                    ];  
                      
                    var new_arr = z.sort(mySort);  
                    alert(new_arr.join('\n'));  
                      
                    </script>  
                    
                    

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
                    1. Oh Struppi,
                      das waren 100 Punkte. Da wär ich nie drauf gekommen. Jetzt ist die Welt wieder in Ordnung.
                      Ein Superdankeschön
                      Bernhard

  2. Hell-O!

    habe eine Datenbank (1936 Datensätze) in ein zweidimensionales Array übertragen [...] nun möchte ich das Array nach den Hausnummern sortieren (z[1][4]). [...] Hat jemand eine Idee?

    Schau dir mal mein Beispiel Sortieren von mehrdimensionalen Arrays an (eine Art Nachbau der Schwartzschen Transformation mittels Javascript).

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    Viel Lärm um nichts || Die neue 1%-Regelung
    1. Hallo Siechfred,
      das könnte die Lösung meines Problems sein, ich werde mich, sobald ich Zeit habe, intensiv damit beschäftigen. Vielen Dank!!!
      Gruß Bernhard