| Ein Array ( Liste, Vektor ) fasst mehrere Variable unter einem gemeinsamen Namen zusammen. |
Auf dieser Seite finden sie eine Zusammenstellung von Themen zur
Verwendung von Arrays in Javascript. Damit sollen bestehende Referenzen und Tutorials ergänzt werden. |
Javascript
|
ECMAScript für HTML und XML |
| Array-Type | Schlüssel, Index und Array-Type |
| Definition | Erzeugung und Initialisierung von Arrays (JSON) |
| Eigenschaften | Type, Anzahl der Elemente eines Arrays |
| Lesen & Schreiben | Einfacher Zugriff auf Array-Elemente |
| Schleifen | Bearbeitung von Array-Elementen in Schleifen (loops) |
| Mehrdimensionale Arrays | Tabellen, Arrays in 2, 3 und mehr Dimensionen |
| Array → Funktion | Arrays als Argumente an Unterprogramme übergeben |
| Funktion → Array | Arrays aus Funktionen zurückgeben |
| Datenspeicher | Arrays als Stapel oder Warteschlange |
| Sortieren | Elemente eines Arrays sortieren |
| String | Umwandlung Text (String) - Array (join,split) |
| Werkzeug | Diverses Array-Werkzeug (concat,slice,splice) |
| Verwandte Themen | JSON (Details), Arrays in PHP, Perl, VBA |
Array-Type und Schlüssel (Index) |
|
|
Javascript kennt nur eine Array-Type. • Zur Kennzeichnung und Unterscheidung der einzelnen Elemente wird eine ganze Zahl>=0 verwendet, dafür sind die Begriffe Schlüssel und/oder Index üblich. • Das erste Element trägt immer den Index [0], das zweite [1] usw. • Diese Art der Array-Organisation ist besonders schnell und geht sparsam mit dem Speicher um, da der Index selbst nicht gespeichert, sondern nur zur Berechnung der Adresse (pointer) verwendet wird. |
•
Vermeiden sie die Verwendung großer Index-Zahlen für wenige Elemente. Wenn für ein Array z.B. nur die Elemente [10000] bis [10003] benötigt werden, dann werden von Javascript ungefragt auch die Elemente [0] bis [10000] erzeugt. |
|
Moderne Programmierung verlangt angeblich nach assoziativen Arrays, in denen
Worte (Text, string) als Schlüssel verwendet werden. • Javascript bietet (derzeit) keine assoziativen Arrays, z.B. color['r']=123; color['g']=234; color['b']=34;
|
Wenn sie derartige Arrays unbedingt benötigen, dann muss eine Hilfs-Konstruktion (Mehrdimensionales Array) verwendet werden. |
Definition und Initialisierung |
|
Leeres Array• Der Befehl new Array() erzeugt ein neues leeres Array mit dem gewählten Namen (hier a). Die Anzahl der Elemente muss dabei nicht angegeben werden und beträgt zunächst 0.• Javascript verwaltet Arrays mit dynamischer Länge, d.h. die benötigte Länge wird später bei der Verwendung angepasst. • Als Array-Namen sind alle zulässigen Namen möglich. Hier werden kurze Namen verwendet, um die Beispiel-Texte kurz zu halten. |
var a = new Array();
// Reservierung mit Schleife
// for(i=0;i<100;i++) {a[i]=0;} |
|
Vorsicht ! Wenn sie ein leeres Array global definieren, um es später in verschiedenen Funktionen zu verwenden, dann kann es zu Problemen mit der Speicher-Reservierung kommen. Solche Laufzeit-Fehler sind sehr schwer zu finden. |
Abhilfe: Initialisieren sie sofort nach der Definition so viele Elemente, wie später maximal benötigt werden. Damit wird der Speicher reserviert und später sind alle Array-Elemente fehlerfrei verwendbar. |
Array mit leeren Anfangs-ElementenWenn bei der Definition eine einzige positive ganze Zahl oder eine entsprechende Variable als Argument verwendet wird, dann wird ein Array dieser Länge erzeugt. Im Beispiel wird b mit 3 Elementen erzeugt, c mit 5 Elementen.• Alle Elemente eines so erzeugten Arrays haben den Wert undefined. • Damit ist nur die vorläufige Länge (Anzahl der Elemente) festgelegt, später kann das Array erweitert oder verkürzt werden. |
var b = new Array(3);
Verwenden sie diese Methode besser nicht, da sie missverständlich
ausgelegt werden kann. Ein Array mit einem einzigen Zahlen-Element wird so definiert:
var dimc = 5; var c = new Array(dimc);
var c1 = new Array();
c1[0] = 123; |
Array mit Initialisierung• Wenn bereits bei der Definition die Werte aller Elemente bekannt sind, dann werden diese als Argumente eingetragen, mit Beistrich getrennt.• Dabei können beliebige Variablen-Typen gemischt werden: • Array ca enthält Zahlen, dabei können ganze und Gleitkomma-Zahlen gemischt werden. • Array cb enthält Texte (strings), Array cc Zahlen und Texte. • Ein Element lässt sich auch auf den Wert null setzen (Unterschied zur Zahl 0). • Ein Array (Beispiel ce) kann als Elemente auch andere Arrays enthalten. Dabei ergeben sich mehrdimensionale Arrays • Ein Array (Beispiel cf) kann auch Objekte enthalten. Probleme: (Alle Beispiele f0..f2 ergeben Fehler !) • Vermeiden sie die Initialisierung mit einem einzigen Element, insbesondere mit einer Zahl, weil das als Versuch interpretiert wird, ein Array mit entsprechend vielen leeren Elementen anzulegen. • Ein Element darf nicht übersprungen werden, deshalb ergibt die Definition von f2 einen Fehler. |
var ca = new Array(11,22,3.1416);
var cb = new Array("Anton","Berta"); var cc = new Array(44,"Dora",55); var cd = new Array(11,null,33); var ce = new Array(ca,cc); var cf = new Array(); cf[0] = new Date(); |
|
// Fehler !
var f0 = new Array(1.234);var f1 = new Array(-2); var f2 = new Array(11,,33); |
|
|
•
JSON-Variante:
var jar = ["Anna",123,"Bert",45,"Christa"];
Diese Syntax-Variante ist gleichwertig: An Stelle der
Anweisung new Array() werden eckige []
verwendet. Mit JSON-Syntax werden normalerweise keine leren Arrays definiert,
sondern Arrays komplett mit allen Daten.In modernen Web-Anwendungen ("Web2") werden häufig Daten im JSON-Format über das Internet transportiert. ♦ Details zur JSON-Variante und zu ihrer Verwendung mit Ajax |
|
Daten-Übergabe an JavascriptDiese Art der Initialisierung eignet sich besonders gut zur automatisierten Übergabe von Daten an Javascript, d.h. durch andere Programme. Sie wird in diesem Web häufig verwendet.Javascript:
Zu Beginn wird ein leeres Array b erzeugt, dazu eine
Index-Variable i, die auf 0 gesetzt wird.
Danach erfolgt die Übergabe der Daten: Jede Programmzeile erzeugt ein zusätzliches
Element von Array b. Der Index i wird
nach jeder Zuweisung um +1 erhöht.PHP: Das Beispiel zeigt, wie der Javascript-Code durch ein PHP-Script-Programm (am Webserver) erzeugt wird: Zunächst werden die Daten als PHP-Array $b angelegt - In der Praxis können die Daten mit PHP beliebig angefordert werden, z.B. aus einer Datenbank oder aus anderen Webseiten. Der fixe Javascript-Code wird in Klartext eingetragen. Zur Übergabe der Daten wird eine foreach-Schleife verwendet. Jeder Durchlauf erzeugt eine Zeile Javascript-Text und damit ein Element des JS-Arrays. Vorteile dieser Technik:
Die Daten-Übergabe (das PHP-Programm) am Webserver wird nur einmalig ausgeführt,
das Javascript-Programm kann auf Client-Seite beliebig oft verwendet werden, ohne den
Webserver zu belasten.
|
Javascript-Code
var b = new Array();
var i = 0; b[i++] = 12; b[i++] = 34; b[i++] = 567; // usw.
|
|
PHP-Code
<?php
<script type="text/javascript">$b=array(12,34,567);
?>
var b = new Array(); var i=0;
<?php
</script>
foreach($b as $bi) {
?>
print "b[i++]=".$bi.";\n";
}
|
|
Array-Eigenschaften: Existenz, Type, Anzahl der Elemente |
|
Der Operator typeofJavascript kennt keine Variablen-Type Array. Die Bestimmung der Type mit dem Operator typeof ergibt den Wert object, den man als Wort (string) testen kann. Das ist leider nicht eindeutig, da es auch andere Objekte gibt, aber immerhin ein Hinweis, auf den man reagieren kann.Der Operator typeof kann auch verwendet werden, um festzustellen, ob ein Array existiert. Wenn ein Array oder eine Variable des angegebenen Namens existiert, dann wird die Type zurückgegeben, ansonsten der Wert undefined (und zwar ohne Auslösung eines Fehlers !). Natürlich kann man mit typeof auch die Type jedes einzelnen Array-Elements bestimmen. |
var c = new Array(11,22,33);
alert("typeof c = "+typeof c); Test mit einer bedingten Verzweigung:
if(typeof c=="object") {
alert("typeof c == object");
}else {alert("typeof c != object");} |
Länge lesenJavascript-Arrays haben nur eine einzige wichtige Eigenschaft, die (aktuelle) Anzahl der Elemente. Die Eigenschaft length liefert die Anzahl als ganze Zahl >=0. |
var clen = c.length;
|
Länge schreiben - Vorsicht !Die Eigenschaft length kann auch geändert werden.• Das Beispiel zeigt, wie die Anzahl der Elemente eines Arrays zunächst auf 10 erhöht wird. Bereits vorhandene Elemente behalten dabei ihre Werte. Alle neuen Elemente werden auf den Wert undefinded gesetzt. • Danach wird die Länge auf 5 gekürzt. Die Daten aller gelöschten Elemente sind dann unbestimmt - d.h. vernichtet ! ♣ Tipp: Verkürzen sie ein Array nur wenn, wenn vorher die nicht mehr benötigten Elemente durch Sortierung an das Ende gebracht wurden. |
Array-Länge vergrößern:
c.length = 10;
Array-Länge verkleinern:
c[9] = 999; c.length = 5;
|
|
Die Array-Länge wird meist in einem der rechts gezeigten Fälle verwendet: • Anfügen eines neuen Elements am Ende • Löschen des letzten Elements • Schleife über alle Elemente |
c[c.length] = "neu";
c.length--; for(i=0;i<c.length;i++) { alert(c[i]);
}
|
GrenzenFür die maximale Anzahl der Elemente scheint es keine festgelegten Grenzen zu geben. Sie richtet sich vermutlich nach dem Betriebssystem und/oder dem verfügbaren Speicherplatz. |
•
Vor der Verwendung sehr große Arrays, sollten sie das Verrhalten sorgfältig testen,
insbesondere auf PC mit älteren Systemen, älteren Browser-Versionen und mit
wenig Arbeits-Speicher. • Da Javascript-Daten meist vom Webserver an den Browser gesendet werden, begrenzt die Übertragungszeit den Umfang: Im Internet sollten Dateien <50-100k bleiben, im Intranet <1-2MB. |
| Die Eigenschaft length kann auch auf Texte angewendet werden. Sie sind selbst dafür verantwortlich, length in einem sinnvollen Zusammenhang anzuwenden. | Die Anwendung von length auf Zahlen ergibt undefined, auf andere Typen evtl. auch Fehler. |
Zugriff auf Array-Elemente: Lesen & Schreiben |
|
Array-Element schreibenJavascript verwendet als Index (fortlaufende Nummerierung der Elemente) von Arrays nur positive ganze Zahlen >=0. Der Index wird als Zahl oder als Variable in [] gesetzt.Das erste Element jedes Arrays hat den Index 0. Das Beispiel zeigt, wie man Werte an die Elemente d[0] und d[15] übergibt. Wenn ein Index die Anzahl der vorhandenen Elemente übersteigt, dann werden alle dazwischen liegenden Elemente mit dem Wert undefinded erzeugt (im Beispiel die Elemente d[1] bis d[14] ). |
var d = new Array();
Neues Element anhängen:
d[0] = 12; d[15] = "vier"; d[d.length] = 56;
|
Array-Element lesenDas Lesen von Daten aus Array-Elementen erfolgt genau analog. Der Index wird nur selten als Zahl eingetragen, sondern meist in einer Variablen berechnet. |
var x = d[0] + 3;
var y = d[x]; |
Array-Variable zuweisen und kopierenWenn sie eine Array-Variable an eine andere Variable zuweisen, dann werden nicht die Werte der enthaltenen Elemente übergeben, sondern die Adresse des Arrays.Das wirkt sich so aus, dass sie das gleiche Array zusätzlich (!) unter einem anderen Namen (hier e) ansprechen können. Wenn sie die Daten eines Arrays tatsächlich kopieren wollen, dann müssen sie das in einer Schleife tun. Im Beispiel können die Elemente von Array n nach dem Kopieren beliebig geändert werden, ohne dass Array d betroffen ist. |
d new Array(1,2,3);
Achtung ! - Danach enthält Array d die
Werte (1,2,99) !
var e = d; e[2] = 99; // ändert d[2] |
|
var n = new Array();
for(var i=0;i<d.length;i++) { n[i]=d[i];
}n[2]=88; // ändert nicht d[2] |
|
Array als Zwischenpeicher für Daten und ObjekteEin Array ist ein idealer Speicher für Daten und Objekte aller Art. Man muss allerdings dafür sorgen, dass gelöschte Elemente entfernt werden, und das Array nicht unkontrolliert anwächst. |
♦ Auf der Seite zum Thema Sortieren finden sie Kapitel zur dynamischen Verwaltung von Objekten in Arrays. |
Mehrdimensionale Arrays |
|||||||||||||||||||||
|
Arrays können auch in mehreren Dimensionen erstellt werden.
Dazu werden die Elemente eines Arrays selbst als Arrays definiert.
Beim Zugriff auf die Elemente werden alle benötigten Indices hintereinander
angeschrieben. Im Beispiel rechts wird m2 als 2dimensionales Array angelegt, und zwar wie eine Tabelle mit 4 Zeilen zu je 5 Spalten. In der ersten (äußeren) Schleife läuft der Index 0..i..3. Dabei wird je ein Element von Array m2 neu angelegt, und zwar selbst als leeres Array. In der nächsten (inneren) Schleife läuft der Index 0..j..5. Zur Demonstration wird in jedes Element des 2dimensionalen Arrays ein Zahlenwert eingetragen. Nach Durchlauf des gezeigten Beispiels: Das Array m2 hat die Länge m2.length=4 Jedes einzelne Element von m2 hat die Länge 5, z.B. m2[3].length=5 Alle 3*5=15 Elemente von m2 enthalten Zahlen, z.B. ist m2[2][3]=6 |
var m2=new Array();
So sieht dieses Array aus:
var i=0; var j=0; for(i=0;i<4;i++) {
m2[i]=new Array();
}
for(j=0;j<5;j++) { m2[i][j]=i*j;
}
|
||||||||||||||||||||
|
Javascript-Arrays können Daten gemischter Typen enthalten.
Damit können Strukturen ähnlich einer kleinen Datenbank aufgebaut werden.
Das Beispiel zeigt das Array p mit Personen-Daten.
Jeder Datensatz enthält einen Text (Vorname) und eine Zahl.
Der erste Index gibt die 'Datensatz-Nummer' an, der zweite Index die Spalte (Feld-Nummer). Nach Ausführung des Beispiels sind z.B. diese Daten eingetragen:
p[0][0]="Rudi"
p[1][1]=34 p[5][0]="Vita" Einige besondere Hinweise: • Leere Elemente können verschieden eingetragen werden, z.B. als leerer Text "", als Wert null, als Zahl 0, usw. • Die einzelnen 'Datensätze' können unterschiedlich viele Elemente enthalten. Javascript hat damit kein Problem, aber ihre Programme zeigen evtl. Fehler beim Versuch, auf nicht vorhandene Array-Elemente zuzugreifen. • Für die Anzahl der Array-Dimensionen gibt es keine technischen Grenzen. So könnten sie z.B. als drittes Element jedes Datensatzes p[i][2] ein Array variabler Länge eintragen. ♣ Das gezeigte Beispiel kann dazu verwendet werden, Teile einer Datenbank vom Webserver an eine Webseite zu übergeben (siehe Kapitel Initialisierung auf dieser Seite). |
So wird ein mehrdimensionales Array als "Mini-Datenbank" angelegt Die Methode wird in diesem Web häufig eingesetzt):
var p=new Array();
Dieser Code kann von vielen Programmen oder Programmiersprachen leicht erzeugt
werden, z.B. zur Javascript-Codierung von Kalkulations-(Excel)-Tabellen.
var i=0; p[i++]=new Array("Rudi",12); p[i++]=new Array("Susi",34); p[i++]=new Array("Theo",567); p[i++]=new Array("",-23); p[i++]=new Array("Ulli",null); p[i++]=new Array("Vita"); |
||||||||||||||||||||
SortierenMehrdimensionale Arrays lassen sich nicht direkt sortieren. Dazu verwendet man verschiedene Tricks.♣ Eine interessante Anwendung ist die interaktive Live-Sortierung von Tabellen auf Webseiten. |
♦ Details und Beispiele zum Sortieren von Arrays und von Webseiten-Tabellen. |
||||||||||||||||||||
Arrays und Strings |
|
| Diese Funktionen dienen zum Aufbau und zur Zerlegung systematisch aufgebauter Texte, deren Teile durch bestimmte Trennzeichen getrennt sind. Sie werden oft vorteilhaft zusammen mit anderen Elementen von Regulären Ausdrücken angewendet. | Beispiele: Datei-Pfade, Internet-Adressen, Datum und Zeit (nach ISO-Standard), usw. |
Funktion joinErzeugt einen Text (string) aus den Elementen eines Arrays.Das Argument in () wird als Trennzeichen bzw. Trenn-String zwischen den einzelnen Elementen verwendet. Zahlen-Arrays werden automatisch in Strings umgewandelt. Wenn der Trenn-String leer ist, werden die Elemente direkt aneinander gesetzt. |
var j = new Array(77,88,99);
Das Beispiel gibt diesen Text aus:
var t = j.join("-#-"); alert("t="+t); 77-#-88-#-99
|
Funktion splitZerlegt einen Text (string) in Teile und gibt sie als Array zurück. Als Argument wird ein Regulärer Ausdruck verwendet. Die Trennzeichen (bzw. Trenn-strings) selbst werden bei der Aufspaltung unterdrückt.♦ Details dazu im Kapitel Reguläre Ausdrücke. |
var t = "/home/test/myweb/index.htm";
Liefert das Array s mit 5 Elementen
var s = t.split("/"); ("","home","test","myweb","index.htm")
|
|
|
| Quirksmode - Objects as Arrays | |