Norbert: sortieren von mehrdimensionalen Arrays

Hallo,

es gibt ein mehrdimensionales Array. Jedes Grundelement besteht aus einem Array, welches Vorname, Name, Jahrgang, Preis und Titel enthaelt. Die Werte kommen aus einer Datenbankabfrage. Nun soll der User die Ergebnisse clientseitig nach seinen Wuenschen sortieren koennen. D.h. das Array muss wahlweise nach Vorname oder Name oder Jahrgang oder Preis oder Titel und sowohl auf- als auch absteigend sortiert werden.

Deshalb meine Frage:
Wie sortiert man ein mehrdimensionales Array in JavaScript.
Fuer eindimensionale Arrays steht ein Beispiel in SelfHTML, fuer mehrdimensionale leider nicht.

Hoffe, jemand kann mir helfen ...

Gruss und Dank
Norbert

  1. Hallo Norbert,

    Deshalb meine Frage:
    Wie sortiert man ein mehrdimensionales Array in JavaScript.

    Einen Ansatz kann ich dir geben:
    Du erstellst für jeden Typ eine Funktion, die zwei übergebene Werte vergleicht. Also z.B.:

      
    function compareString(var1, var2){  
      /* ... */  
    }  
      
    function compareNumber(var1, var2){  
      /* ... */  
    }  
    
    

    Die jeweilige Funktion gibt dann über return einen entsprechenden Rückgabewert (bei Zahlen ist das einfach, bei Strings etwas schwerer):
    -1: var1<var2
    0: var1==var2
    1: var1>var2

    Auf diese Art und Weise kannst du die Werte über eine Schleife miteinander vergleichen. Und dann musst du die "nur noch", je nachdem wie der Rückgabewert war, in ein Ergebnis-Array einreihen.

    Das ist also der Ansatz. Das Programmieren bleibt aber nun dir überlassen. :-)

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
    1. Hi Marc,

      Deshalb meine Frage:
      Wie sortiert man ein mehrdimensionales Array in JavaScript.
      Einen Ansatz kann ich dir geben:

      danke,
      genau das war es !
      Man kann bei Object.sort() eine Comparisationsfunktion angeben,
      was eigentlich alle Probleme loest.

      Gruss und Dank
      Norbert

  2. Tag Norbert.

    Wie sortiert man ein mehrdimensionales Array in JavaScript.

    Sortieren mehrdimensionaler Arrays
    Tabellen dynamisch sortieren

    Siechfred

  3. Hallihallo!

    Vor gar nicht allzu langer Zeit hatte ich mal ein ähnliches Problem.

    Ich habe das folgendermaßen gelöst:

    1. einen eindimensionalen Array anlegen, in dem alle Arrays zusammengefügt werden. Dieser ist genauso lang wie die anderen.

    2. dieses Array mit den Inhalten der anderen füttern. Also die einzelnen Daten per join() in einem String zusammenwerfen, und dann im eindimensionalen Array ablegen. Für join() kann man sich selbst ein Trennzeichen aussuchen, also z.B. "###"

    3. dieses eindimensionale Array per sort() sortieren lassen.

    4. die einzelnen Arrayelemente per split() (hier das gleiche Trennzeichen angeben wie bei join()) wieder in die ursprünglichen Arrays geben.

    5. die ursprünglichen, und nach Deinen Vorstellungen sortierten Arrays ausgeben lassen.

    Das Ganze sieht vielleicht auf den ersten Blick etwas kompliziert aus, ist es aber ganz und gar nicht, und dieses Verfahren hat einige gewaltige Vorteile:
    a) Performance: eine Umsortierung von einer ca. 2000 x 6 Zellen grossen Tabelle dauert auf meinem Rechner nur noch 1.6 Sekunden. Algorithmen, die nur eine "Spalte" sortieren und dann von Hand die anderen Spalten wieder anpassen, liefen ca. 15 Sekunden.

    b) Variabilität: man kann sich seine Sortierzeile frei aussuchen. Auch die Tatsache, daß man mal Zahlen statt Strings sortieren will, stellt kein Problem dar.

    c) Sicherheit: es dürfen im Gegensatz zu anderen Algorithmen, auch mal doppelte Einträge, auch in der Sortierzeile, vorhanden sein, trotzdem bleiben die Datensätze immer beieinander.

    Wenn Du Interesse hast, kannst Du Dir das Skript unter Beispielseite mal in Aktion ansehen.

    Viele liebe Grüße,
    Der Dicki

    PS: Bevor Fragen aufkommen: ja, die Alben sind alle meine!