Mehrdimensiolales Array sortieren...
lyrie
- javascript
0 Axel Richter0 lyrie0 Axel Richter0 lyrie
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?
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
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?
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
Nochmal hallo und danke!
Ja. Du musst aber _immer_ beide Vergleiche umkehren, also:
Schon klar ;)
nochmal danke für die Hilfe
MFG
lyrie