JavaScript unterstützt – anders als andere Programmiersprachen – vom Grundsatz her keine assoziativen Arrays. Assoziative Arrays sind Arrays, bei denen der Zugriff auf die einzelnen Array-Elemente über einen Schlüssel erfolgt. Dieser Schlüssel wird in Form eines Strings angegeben, der im Allgemeinen eine Eigenschaft bezeichnet, deren Wert an dieser Stelle im Array gespeichert ist. Allerdings erlaubt JavaScript bei Array-Operationen, wie zuvor erwähnt, nur den Zugriff über den Array-Index. Mit Hilfe des JavaScript-Objekts Object kann dieses Manko behoben werden.
Object ist ein allgemeines Objekt, welches zur Speicherung von Eigenschaften genutzt werden kann. Die Eigenschaften werden unter einem individuellen Schlüssel gespeichert. Der Zugriff auf die Eigenschaften eines solchen Objekts erfolgt dann mit Hilfe des Punkt-Operators in der Form objektname.eigenschaft, wobei eigenschaft der Schlüssel ist, unter dem auf den entsprechenden Wert zugegriffen werden kann. Zulässige Schlüssel müssen bei dieser Form der Definition von Eigenschaften mit einem Unterstreichungszeichen oder einem Buchstaben beginnen und dürfen Buchstaben, Ziffern sowie Unterstreichungszeichen enthalten. Es gibt aber auch die Möglichkeit mit dem Vektor-Operator ([]) auf die Eigenschaften eines Objekts vom Typ Object zuzugreifen, wodurch ein assoziativer Zugriff realisiert werden kann. Insofern kann man Instanzen des Objekts Object bereits als eindimensionale assoziative Arrays sehen. Erfolgt die Initialisierung der Eigenschaften eines Objekts durch Nutzung des Vektor-Operators, so sind beliebige Zeichenketten als Schlüssel möglich.
Anders als ein normales Array ist ein über das Object-Objekt nachgebildetes assoziatives Array nicht mit der Array-Eigenschaft length ausgestattet. Das bedeutet, dass der Zugriff auf die einzelnen Elemente eines solchen Arrays nicht über den üblichen Array-Index erfolgen kann, sondern ausschließlich über die Schlüssel des Objekts. Auch die in einem Array-Objekt enthaltenen Methoden sind nicht verfügbar. Die in einem Object gespeicherten Eigenschaften – bzw. deren Schlüssel – lassen sich aber durch Nutzung der for-in-Schleife ermitteln. Durch Zählen der enthaltenen Schlüssel läßt sich das Problem mit der fehlenden length-Eigenschaft beheben.
Im Beispiel unten wird die Definition sowie der Zugriff auf die Elemente eines assoziativen Arrays mit Hilfe von Object-Objekten demonstriert. Als erstes wird eine Array-Variable mit dem Namen inventar definiert, die durch ein leeres Array initialisiert wird. Dann wird an Index-Position 0 ein Object-Objekt eingefügt, welches in Folge mit Werten für die Schlüssel „Artikel” und „Preis” initialisiert wird. Die beiden darauf folgenden Array-Elemente werden ebenfalls mit Schlüssel-Werte-Paaren gefüllt.
Nun geht es an die Ausgabe der Daten. Zunächst wird die Variable nkeys, welche der Speicherung der Anzahl der Schlüssel-Werte-Paare dient, definiert und mit 0 initialisiert. In der darauf folgenden for-in-Schleife wird jeder enthaltene Schlüssel per document.write ausgegeben und die Anzahl der gefundenen Schlüssel hochgezählt. Die Variable attr wird durch die for-in-Schleife bei jedem Durchgang mit dem aktuellen Schlüssel-String gefüllt. Dabei wird nur das erste Element des Arrays inventar (inventar[0]) genutzt (die anderen Elemente haben die gleiche Struktur). Danach wird die ermittelte Anzahl der gefundenen Schlüssel ausgegeben.
Der letzte Abschnitt des JavaScript-Codes dient der Ausgabe der Inhalte des assoziativen Arrays. Hier wird mit der ersten for-Schleife jedes im Array inventar enthaltene Element nacheinander verarbeitet. Da inventar ein normales Array ist, kann hier auf die Array-Eigenschaft length zurückgegriffen werden um die Anzahl der enthaltenen Elemente zu ermitteln. Die innere for-in-Schleife greift auf Objekte des Typs Object zu (inventar[i] enthält Instanzen vom Typ Object), so dass hier der Zugriff über die enthaltenen Eigenschaften (Schlüssel) erfolgen muss. Es wird also jeweils der Inhalte inventar[i]['Artikel'] gefolgt von inventar[i]['Preis'] ausgegeben. Nach der Ausgabe eines jeden Elements von inventar (Object-Instanz mit enthaltenen Eigenschaften Artikel und Preis) wird ein Zeilenumbruch ausgegeben.
<script language="javascript" type="text/javascript"> <!-- // JavaScript-Bereich für ältere Browser auskommentieren // Variable mit einem leeren Array erzeugen var inventar = new Array (); // Neue Instanz eines Object-Objekts erzeugen und an erster // Stelle im Array speichern inventar[0] = new Object (); // In der zweiten Dimension wird jetzt ein Schlüssel für assoziativen // Zugriff vergeben und der entsprechende Wert zugewiesen inventar[0]['Artikel'] = 'Maus'; inventar[0]['Preis'] = '9,99'; // Weitere Datensätze mit entsprechenden Schlüsseln initialisieren inventar[1] = new Object (); inventar[1]['Artikel'] = 'Monitor'; inventar[1]['Preis'] = '199,-'; inventar[2] = new Object (); inventar[2]['Artikel'] = 'Rechner'; inventar[2]['Preis'] = '498,-'; // zur Speicherung der Anzahl der enthaltenen Schlüssel nkeys = 0; // Im Objekt vergebene Schlüssel ausgeben und Schlüssel zählen document.write ('Enthaltene Schlüssel: '); // Die enthaltenen Schlüssel werden mit der for-in-Schleife ermittelt // und in der Variable attr zwischengespeichert for (var attr in inventar[0]) { document.write (attr + ' '); nkeys++; } // Anzahl der enthaltenen Schlüssel ausgeben document.write ('<br>Anzahl der Schlüssel (entspricht Array.length): ' + nkeys + '<br>'); document.write ('Inhalt des assoziativen Arrays:<br>'); // Zugriff auf length ist möglich, da inventar ein einfaches Array ist for (i = 0; i < inventar.length; i++) { // Bei Zugriff auf Objekte existiert kein length for (var attr in inventar[i]) // Inhalt des unter den Schlüsseln gespeicherten // Elements ausgeben document.write (inventar[i][attr] + ' '); // Zeilenumbruch ausgeben document.write ('<br>'); } // --> </script>
Hallo wollte gerade das Script für die Schriftvergrößerung testen, aber irgendwie bekomme ich das nicht hin. Habe eine Joomla Website und dort die ... » mehr
von Gast am Donnerstag, 22. April 2010 13:32 in JavaScript - bisher 1 AntwortHallo,
damit kann man nicht allzu viel anfangen. Soviel ich weiss kann es zuweilen Probleme mit Tabellen-Layouts geben. Dort werden die ... » mehr
Hallo, ich hab eben das Javascript zur Schriftengröße eingebaut, klappt auch wunderbar auf Firefox, aber der IE 8 hat folgendes Problem: - wenn ich ... » mehr
von horst1234 am Dienstag, 23. Februar 2010 13:06 in JavaScript - bisher 1 AntwortIch hab das charset im Header geändert (wie in der beispiel.html), und schon klappt es ... » mehr
Hallo, ich möchte gerne eine Zeile zwischen zwei andere Zeilen einfügen. Leider klappt folgender Versuch noch nicht so richtig. Vielleicht kann mir ... » mehr
von Bluecaspar am Mittwoch, 10. Februar 2010 18:09 in JavaScript - bisher 2 AntwortenJa genau, das war der Fehler. Vielen Dank Alex.
Hier der korrigierte Code:
<html>
<head>
<title>
Test
... » mehr
Hallo, ich würde gerne ein Fenster in einer Webseite erzeugen. Das Fenster sollte dabei auf ein Frame begrenzt sein, sich also nicht aus diesen ... » mehr
von Bluecaspar am Dienstag, 9. Februar 2010 13:57 in JavaScript - bisher 2 AntwortenJa hervorragend, dass ist genau das was ich möchte. Danke ... » mehr
Hallo, ich bin gerade dabei die Galerie mit der Lightbox 2 zu verknüpfen, da ich die Bilder im Vollformat gerne in diesem schicken aufpoppenden ... » mehr
von GoPeter am Montag, 16. November 2009 23:38 in JavaScript - bisher 16 AntwortenSoo...hat lange gedauert...aber jetzt ist es endlich ... » mehr
¬ Menu
¬ Gratis Download
¬ Seminare
¬ Yoga
¬ Insolvenzrecht
¬ News
15.08.2008Schleifen in PHP: Die While-Schleife » mehr 13.08.2008Nutzung von Variablen unter PHP: Definition, Sichtbarkeit und vordefinierte Variablen » mehr 11.08.2008Ausgabe von Datum und Zeit mit PHP nach Konvertierung in ein String » mehr Eine vollständige News-Liste ist auf der News-Seite zugänglich.
¬ Foren
¬ Buchtipp

JavaScript, m. CD-ROM - Einstieg für Anspruchsvolle
Weitere JavaScript Literaturtipps finden Sie unter JavaScript Bücher
Webdesign •
Beratung Internetseite •
Programmierung Internetseite