sortieren von mehrdimensionalen Arrays
Norbert
- javascript
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
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/
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
Tag Norbert.
Wie sortiert man ein mehrdimensionales Array in JavaScript.
Sortieren mehrdimensionaler Arrays
Tabellen dynamisch sortieren
Siechfred
Hallihallo!
Vor gar nicht allzu langer Zeit hatte ich mal ein ähnliches Problem.
Ich habe das folgendermaßen gelöst:
einen eindimensionalen Array anlegen, in dem alle Arrays zusammengefügt werden. Dieser ist genauso lang wie die anderen.
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. "###"
dieses eindimensionale Array per sort() sortieren lassen.
die einzelnen Arrayelemente per split() (hier das gleiche Trennzeichen angeben wie bei join()) wieder in die ursprünglichen Arrays geben.
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!