zweidimensionales Array sortieren
Bernhard Wagner
- javascript
0 Jörg Peschke0 JürgenB0 Bernhard Wagner0 wahsaga-1 Bernhard Wagner0 Struppi
0 Siechfred
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
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,
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
Hallo Jürgen,
danke für Deine Antwort. Den Link schau ich mir noch mal genauer an.
Gruß Bernhard
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
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
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
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.
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
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.
Das könnte schief gehen:
http://forum.de.selfhtml.org/archiv/2005/1/t98643/#m601461
Wieso?
Heißa, vergaloppiert :-)
Siechfred
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
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.
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
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
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.
Oh Struppi,
das waren 100 Punkte. Da wär ich nie drauf gekommen. Jetzt ist die Welt wieder in Ordnung.
Ein Superdankeschön
Bernhard
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
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