JavaScript - Arrays - Sein oder nicht sein, das ist hier die Frage
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. Sicher ist sicher
Sehr oft möchte man überprüfen, ob ein entsprechendes Element in einem Array vorhanden ist. In PHP (und anderen Sprachen auch) lässt sich das ganz einfach machen mit einem:
if ($array[2]['bla']['blubb'])
In JavaScript
Was wohl? Natürlich nicht! Wie könnte es auch anders sein. Zunächst mal muss man das hier wissen. Um nicht irgendwelche
Fehlermeldungen des Browsers um die Ohren gehauen zu bekommen, sollte man immer eine solche Überprüfung von Array-Elementen
mit if (typeof ... != 'undefined')
vornehmen.
Hinweis
Mit typeof
kann man in JavaScript die Art eines Objekts herausfinden. In vielen Fällen kommt zwar nur ein schlichtes
Object
dabei heraus, aber das reicht für eine Existenzprüfung. Wenn ein Objekt (und somit auch ein Array-Element)
dagegen nicht existiert, so wird ein undefined
zurückgegeben.
Bei einfachen Beispielen funktioniert auch ein simples if (mein_array[x])
, aber leider habe ich die Erfahrung gemacht,
dass es bei komplexeren Beispielen zu Problemen kommt. Aber fragt mich nicht warum. Daher gewöhnt euch für diesen Fall die
Prüfung mittels typeof
an.
3. ABER!!!!
... leider reicht das bei Arrays (und auch anderen Elementen) oft nicht aus. Und zwar immer dann, wenn ein Objekt noch mehrere
Unterobjekte mit unbekannter Tiefe hat. Man muss sich das so vorstellen. Wir haben zum Beispiel ein Formular, möglicherweise
mit einem select
-Feld und darin unter Umständen ein paar option
-Elemente. Will man nun überprüfen,
ob Letztere vorhanden sind, so knallt es bereits dann, wenn das select
-Feld nicht vorhanden ist. Auf Arrays übertragen
sieht das zum Beispiel so aus.
mein_array = new Array ();
mein_array[0] = new Array ();
mein_array[0]['A'] = 'blubb';
mein_array[0]['B'] = 'blubber';
mein_array[2] = new Array ();
mein_array[2]['A'] = 'laber';
mein_array[2]['B'] = 'schwall';
if (mein_array[1]['A'])
{
alert('Element 1-A vorhanden');
}
In diesem Fall bekämen wir bereits eine Fehlermeldung zu Gesicht, noch ehe wir wüssten, wie uns geschieht. Des Rätsels Lösung ist recht einfach. Zumindest für die Verhältnisse von JavaScript.
Die Lösung
Wir wollen überprüfen, ob [1]['A']
vorhanden ist. Leider gibt es ein Problem, da bereits das Element [1]
nicht existiert. Also knallt es hier schon. Wenn man also nicht weiß, ob die erste Ebene vorhanden ist, so muss man zuerst die
überprüfen und sich erst im Erfolgsfall an die zweite wagen. Das könnte dann so aussehen:
if (mein_array[1])
{
alert('Element 1 vorhanden');
if (mein_array[1]['A'])
{
alert('Element 1-A vorhanden');
}
else
{
alert('Element 1-A nicht vorhanden');
}
}
else
{
alert('Element 1 nicht vorhanden');
}
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt