Frage zu mehrdimensionalen Arrays in Javascript
Raphael
- javascript
0 GHopper0 Biesterfeld0 Jörg Peschke0 Struppi
Hallo,
ich verwende mehrdimensionale Arrays in Javascript.
Dabei besteht der Index nicht aus Zahlen, sondern aus Strings.
Wie kann ich solche Arrays in einer Schleife durchlaufen und wie die Groesse ermitteln ?
Das normale array.length liefert mir die Groesse 0, aber da muss was drinnen sein.
Gruss,
Raphael
Hallo,
könntest Du einen Link angeben oder den relevanten Teil der Array-Erzeugung und -Befüllung in einem Beitrag hinzufügen?
Gruss,
GHopper
Hej,
Dabei besteht der Index nicht aus Zahlen, sondern aus Strings.
Du meinst also assoziative Arrays, oder wie man sie auch nennt Hashes.
Das normale array.length liefert mir die Groesse 0, aber da muss was drinnen sein.
Guckst du hier: http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays . Da steht:
"Nachteil ist, dass die Methoden des Array-Objekts nicht anwendbar sind. Auch kennen assoziative Arrays keine Eigenschaft length. Elemente eines assoziativen Arrays können stets nur mit dem Namen oder über eine for-in-Schleife angesprochen werden."
Hoffe hat geholfen.
Biesterfeld
Hallo Raphael,
Wie ich selbst erst in diesem Forum gelernt habe (Danke an Struppi u. Co.!) gibt es in JavaScript eigentlich keine Assoziativen Arrays (also Arrays mit Strings als Index) - genau genommen sind das Objekte. Diese kannst du zwar ähnlich wie Arrays behandeln:
var testary = new Array();
testary["test1"] = 5;
testary["test2"] = 6;
, genau genommen entspricht die obere schreibweise aber einem
var testary = new Object();
testary.test1 = 5;
testary.test2 = 6;
Aus diesem Grund funktioniert "testary.length" nicht, weil dies nur auf "echte" Arrays anwendbar ist.
Was du aber z.B. machen kannst, ist eine for...in schleife:
var ObjectSize = 0;
for (var property in testary) {
ObjectSize++;
}
Nach Durchlaufen dieser Schleife hast Du in "ObjectSize" die Grösse des Objektes (die "länge" deines Arrays, wenn du so willst) stehen.
Gruesse,
Joerg
Noch ein paar Ergänzungen von mir.
Wie ich selbst erst in diesem Forum gelernt habe (Danke an Struppi u. Co.!)
.. (und Peter S.)
gibt es in JavaScript eigentlich keine Assoziativen Arrays (also Arrays mit Strings als Index) - genau genommen sind das Objekte. Diese kannst du zwar ähnlich wie Arrays behandeln:
Arrays sind Objekte.
Der Punkt ist, das in JS der [] Operator auch zum Zugriff auf Objekteigenschaft genutzt werden kann. D.h....
var testary = new Array();
testary["test1"] = 5;
testary["test2"] = 6;
... obwohl hier scheinbar der Index Operator genutzt wird, fügst du so nur neue Eigenschaften des Objektes hinzu. Das funktioniert grundsätzlich für alle Objekte:
var x = new String();
x['a'] = 'test';
alert(x.a);
var x = new Option();
x['a'] = 'test';
alert(x.a);
var x = new Number();
x['a'] = 'test';
alert(x.a);
var x = new Image();
x['a'] = 'test';
alert(x.a);
Weil eben alle Objekte, auch Array, von Object abgeleitet sind.
var x = new Object();
x['a'] = 'test';
alert(x.a);
, genau genommen entspricht die obere schreibweise aber einem
var testary = new Object();
testary.test1 = 5;
testary.test2 = 6;Aus diesem Grund funktioniert "testary.length" nicht, weil dies nur auf "echte" Arrays anwendbar ist.
Funktionieren tut das Array trotz allem, nur hat man dadurch das eine neue Eigenschaft hinzugefügt wurde, kein neues Array Element eingefügt, also bleibt die Länge des Array weiterhin bei null.
Was du aber z.B. machen kannst, ist eine for...in schleife:
var ObjectSize = 0;
for (var property in testary) {
ObjectSize++;
}Nach Durchlaufen dieser Schleife hast Du in "ObjectSize" die Grösse des Objektes (die "länge" deines Arrays, wenn du so willst) stehen.
Und man sollte eben tunlichst vermeiden von einem Array zu sprechen oder gar eins zu benutzen, da dann plötzlich seltsame Widersprüche auftauchen können:
var x = new Array();
x['a'] = 'test';
x['200'] = 'hallo';
alert('Länge des Arrays:' + x.length);
var ObjectSize = 0;
for (var property in x) ObjectSize++;
alert('Länge des Arrays:' + ObjectSize);
Struppi.