sort() mit mehrdimensionale Arrays
Konrad Mathieu
- javascript
0 jonny0 Konrad Mathieu0 jonny
0 JürgenB0 Axel Richter0 Siechfred
Ich muss mehrere Strings nach einer darin enthaltenen Zahl sortieren. Ich zerlege und speichere sie dazu in einem mehrdimensionalen Array, um das anschließend zu sortieren.
Also quasi so:
function numSort(a,b) { return a-b; }
var test = new Array();
test[0] = new Array(); test[0] = ('asdf', 'acht', 'acht', '8');
test[1] = new Array(); test[1] = ('wqerwr', 'sieben', 'sieben', '7');
test[2] = new Array(); test[2] = ('fsdgf', 'zwei', 'zwei', '0');
test.sort(numSort);
for(i=0;i<5;i++) {
alert(test[i]);
}
.. und alles ist schön nach der letzten Zahl sortiert.
Wenn ich aber Schritt 1 stattdessen per Schleife durchführe:
for(i=0;i<test.length;i++) {
test[i]=new Array();
test[i]=someOtherArray[i].split('#');
}
..läuft es nicht weil "Zahl erwartet" von numSort.
Ist denn wohl:
test[0] = ('foo', 'bar');
was anderes als:
someVar = 'foo#bar';
test[0] = someVar.split('#');
??
Oder kann man Strings evt. auch eleganter / effektiver sortieren?
Bin heute schon zu lange dran und mir käst das Hirn, bin für Hilfe oder Denkanstöße dankbar,
Viele Grüße,
Konrad
Hallo Konrad,,,
Oder kann man Strings evt. auch eleganter / effektiver sortieren?
vor einigen Tagen hatte ich selbst diesbezüglich einen Thread aufgemacht und eine sehr elegante Lösung erhalten.
Schau doch einfach mal rein:
http://forum.de.selfhtml.org/my/?t=99696&m=609430
Hierbei handelt es sich allerdings um Perl.
Mfg,
Jonny
vor einigen Tagen hatte ich selbst diesbezüglich einen Thread aufgemacht und eine sehr elegante Lösung erhalten.
Schau doch einfach mal rein:
http://forum.de.selfhtml.org/my/?t=99696&m=609430
Hallo Jonny,
du bist ja schneller als der Schall! Perl scheidet leider aus weil kein Server beteiligt, muss alles auf einem gewöhnlichen PEZ laufen..
Ich schaue jetzt trotzdem mal,
viele Grüße,
Konrad
Hallo Jonny,
du bist ja schneller als der Schall! Perl scheidet leider aus weil kein Server beteiligt, muss alles auf einem gewöhnlichen PEZ laufen..
naja, ich tummel hier so rum! langeweile...
Mfg,
Jonny
Hallo,
schau Dir mal http://www.j-berkemeier.de/TableSort.html an. Der Trick beim Sortieren von mehrdimensionalen Arrays ist, dass Du in der Vergleichsfunktion (bei mir VglFkt) die Werte aus den Spalten miteinander vergleichst und nicht die Pointer auf die Zeilen, die an die Vergleichsfunktion übergeben werden.
Gruß, Jürgen
Ich muss mehrere Strings nach einer darin enthaltenen Zahl sortieren. Ich zerlege und speichere sie dazu in einem mehrdimensionalen Array, um das anschließend zu sortieren.
Also quasi so:
function numSort(a,b) { return a-b; }
var test = new Array();
test[0] = new Array(); test[0] = ('asdf', 'acht', 'acht', '8');
^? Woher hast Du diese Syntax?
Das Element in test[0] ist jetzt 8. Alle anderen Werte sind weg.
.. und alles ist schön nach der letzten Zahl sortiert.
Ja, aber die Werte 'asdf', 'acht', 'acht' sind weg.
Ist denn wohl:
test[0] = ('foo', 'bar');
^test[0] ist jetzt "bar"
was anderes als:
someVar = 'foo#bar';
test[0] = someVar.split('#');
^test[0] ist jetzt _wirklich_ ein Array.
Der numSort-Funktion werden durch Array.sort(numSort) die beiden aktuell zu sortierenden Elemente übergeben. In Deinem Fall sollen das zwei Arrays sein. Du musst dann in numSort die Elemente dieser Arrays voneinander abziehen, welche die numerischen Werte enthalten.
Bsp.:
<script type="text/javascript">
<!--
function numSort(a,b) { return a[3]-b[3]; }
var test = new Array();
test[0] = new Array('asdf', 'acht', 'acht', '8');
test[1] = new Array('wqerwr', 'sieben', 'sieben', '7');
test[2] = new Array('fsdgf', 'zwei', 'zwei', '0');
for(i=0;i<3;i++) {
alert(test[i]);
}
test.sort(numSort);
for(j=0;j<3;j++) {
alert(test[j]);
}
//-->
</script>
viele Grüße
Axel
Tag Konrad.
Du hast deine Lösung ja schon erhalten, ansonsten siehe https://forum.selfhtml.org/?t=99696&m=612186 (ich lese das Forum von unten nach oben, sonst hätte ich mir die Antwort sparen können :-) ).
Siechfred