JavaScript - Arrays - Das Ding mit der Verarbeitung
1. Die Abschnitte
- Überblick
- Das dumme Objekt
- Die Sache mit den Indizes
- Das Ding mit der Verarbeitung
- Voodoo oder was?
- Sein oder nicht sein, das ist hier die Frage
- Und all die schönen Array-Funktionen von PHP?
- Die Erleuchtung
2. Schleifen
Im vorherigen Abschnitt habe ich schon auf ein paar Probleme hingewiesen, wenn es um die Ermittlung der Länge eines Arrays geht.
Daher sollte man eine for
-Schleife nur dann nutzen, wenn man sich gaaaaaanz sicher ist, dass der Index fortlaufend
durchnummeriert ist. Und natürlich mit 0
anfängt.
mein_array = new Array ();
mein_array[0] = 'bla';
mein_array[1] = 'blubb';
mein_array[2] = 'blubber';
for (i = 0; i < mein_array.length; i++)
Ansonsten sollte man lieber die sichere Variante, nämlich die for...in
-Schleife benutzen, die in etwa mit
foreach
aus PHP gleichzusetzen ist. Dabei enthält die "Zählervariable" den Wert des Indexes. Auf dessen Inhalt kann
man dann wie gewohnt zugreifen:
mein_array = new Array ();
mein_array[0] = 'bla';
mein_array[3] = 'blubb';
mein_array['laber'] = 'blubber';
for (i in mein_array)
{
alert (i + '-' + mein_array[i]);
}
Ein Hinweis
Mittlerweile gibt es auch seit JavaScript 1.7 ein foreach
. Allerdings kommen (natürlich) der Internet Explorer und
auch der Opera sowie der Safari nicht damit klar, da sie noch eine ältere JavaScript-Version beinhalten.
3. Wegballern und plattmachen
Will man Elemente aus einem Array entfernen, die nicht am Anfang oder Ende stehen, so muss man mit delete
arbeiten.
mein_array = new Array ();
mein_array['bla'] = 'laber';
mein_array['blubb'] = 'schwall';
mein_array['blubber'] = 'jodelblah';
delete mein_array['blubb'];
Das klappt eigentlich auch ganz gut, man muss aber auf zwei Dinge achten. Bei einem durchnummeriertem Index fehlt dann auf einmal ein
Wert (wie auch in PHP). Leider kann man dann das Array nicht einfach neu sortieren, wie es zum Beispiel in PHP mit
array_values
möglich ist. Stattdessen muss man es anschließend komplett durchlaufen und neu aufbauen.
Die zweite Geschichte ist die mit der Ausgabe über alert
. Da bekommt man dann eine leere Ausgabe, wo vorher noch
das Element war. Lasst euch davon nicht irritieren, so wie es bei mir der Fall war. Ich habe da die lächerlichsten Schlüsse aus
dieser Ausgabe gezogen und viel, viel Zeit mit der Ursachenforschung verschwendet. Nehmt dieses seltsame Verhalten einfach als
gottgegeben hin. Obwohl ja wohl eher der Teufel für diese Sprache verantwortlich ist.
mein_array = new Array ();
mein_array[0] = 'laber';
mein_array[1] = 'schwall';
mein_array[2] = 'jodelblah';
delete mein_array[1];
alert (mein_array);
...ergibt ein laber,,jodelblah
. Trotzdem hat das Array nur noch zwei Elemente. Das könnt ihr wunderbar mit einer
for...in
-Schleife überprüfen.
4. Zahlensalat
Passt um Gottes Willen höllisch auf (schöner Widerspruch), wie ihr Zahlen als Werte in Arrays schreibt, da könnt ihr derbe auf die Fresse fallen. Und zwar dann, wenn ihr nicht wisst, wie viele Einträge es sind. Ein kleines Beispiel.
mein_array = new Array ();
mein_array[0] = new Array (6,5);
mein_array[1] = new Array (4,7,2,9);
mein_array[2] = new Array (3);
So jetzt fragt mal spaßeshalber die Anzahl der jeweiligen Einträge über length
ab. Bei mein_array[0]
bekommt ihr eine 2
, bei mein_array[1]
eine 4
und bei mein_array[2]
eine
3
. Was? Eine drei? Wir haben doch nur einen Eintrag, also sollte JavaScript uns gefälligst eine
1
liefern.
Tut es aber nicht. Stattdessen wird ein Array mit drei leeren Einträgen erzeugt. Bei einem alert (mein_array[2]);
bekommt ihr doch tatsächlich das zurück:,,
. Was das soll? Ach, das ist eine der vielen Ungereimtheiten, die uns
diese so genannte Programmiersprache bietet. Um das Problem zu vermeiden solltet ihr tunlichst mit Anführungszeichen arbeiten:
mein_array[1] = new Array ('4','7','2','9');
mein_array[2] = new Array ('3');
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt