Hauptmenü

Untermenü

OOP/DOM-Scripting JavaScript - Praxistutorial 2 - in_array

1. Die Abschnitte

2. Ein erster Versuch

Hinweis

Für diejenigen, die mit PHP noch nicht so vertraut sind, ein kurzer Hinweis. Mit der Funktion in_array kann man bei PHP überprüfen, ob ein bestimmter Wert in einem Array enthalten ist. Im Erfolgsfall bekommt man ein true zurück geliefert.


Array.prototype.in_array = function (needle)
{  
  for (var i in this)
  {
    if (this[i] == needle)
    {
      return true;
    }
  }
}
if (arr_1.in_array('bla'))
{
  alert ('JAU');
}

Erläuterung

Wegen der Objektstruktur in JavaScript benötigen wir im Gegensatz zu PHP nur die berühmte "Nadel" (needle) als Parameter für unsere Methode. Den "Heuhaufen" (haystack), in dem wir suchen wollen, übergeben wir direkt beim Zugriff mittels arr_1.in_array. Somit ist this also ein Verweis auf das "eigene" Array-Objekt, in diesem Fall das arr_1 = new Array(); (siehe Einführung). Ein break in der Schleife benötigen wir nicht, da die Funktion im Erfolgsfall ja automatisch durch das return true; beendet wird. Ach ja, die for-in-Schleife benutzen wir, um auch mit "assoziativen" Arrays arbeiten zu kömmen. Probiert es mal mit arr_3 aus.

3. So weit, so gut

Aber! Es ist nicht sauber! Gut, es funktioniert aber die Sache hat genau genommen einen Haken. Kommentiert mal spaßeshalber die Bedingung aus und baut folgenden Code ein.


alert (typeof this[i] + '-' this[i]);

Jetzt bekommt ihr Ausgaben wie string-blubb oder string-blubber zu Gesicht. Und ganz zum Schluss erscheint auf einmal dieses hier.


function-function (needle)
{  
  for (var i in this)
  {
    ...
  }
}


Erläuterung

Hier könnt ihr also wunderbar sehen, was JavaScript mit Methoden macht, die man per prototype dem Array-Objekt hinzufügt. Sie werden, wie ich schon sagte, einfach angehängt, und zwar mit einem "assoziativen" Index, wobei Selbiger der Funktionsname ist. Man muss sich jetzt also zum Beispiel arr_1 (und alle andern auch) so vorstellen:


var arr_1         = new Array ();
arr_1[0]          = 'blubb';
arr_1[1]          = 'blubber';
arr_1[2]          = 'bla';
arr_1[3]          = 'schwall';
arr_1['in_array'] = 'function ()...';

Um das auch zu sehen, müsst ihr nur obige alert-Meldung nur um ein i ergänzen. Das sähe dann in Gänze so aus: alert (i + '-' + typeof this[i] + '-' + this[i]);.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt