JavaScript: Mehrdimensionale Arrays

C

Crazymind

Guest
Kann mir jemand erklären warum das geht(ausgabe=text):
CODE
//var elementId = elem.id;

cc_arrNewText.push({'key': taTmpText});

alert(cc_arrNewText[0]['key']);



aber das nicht?(ausgabe=undefined):

CODE
var elementId = elem.id;

cc_arrNewText.push({elementId: taTmpText});

alert(cc_arrNewText[0][''+elementId+'']);


(elem.id = "myTextarea" und taTmpText = "text" und cc_arrNewText ist vorher leer)

thx, grüsse Crazy
 
Hallo...

mh, eigentlich dachte ich das wäre ganz einfach, aber....

Du hast recht, eigentlich müsste das funktionieren....

Hier mein Test, der leider auch keine Lösung brachte aber zu Verwirrung stiftete:

CODE

<textarea id="mySampleTextArea">my sample textarea value</textarea>
<script>
/* declare variables */
var cc_arrNewText = new Array();

var elementText = document.getElementById("mySampleTextArea").value;
var elementName = document.getElementById("mySampleTextArea").id;

/* push date to array */
cc_arrNewText.push
(
{
elementName : elementText,
iii : elementText, // iii is not declared, this should not work...
"ddd" : elementText
}
);


/* output */
alert( cc_arrNewText[0]["elementName"]); // with string elementName - this should not work
alert( cc_arrNewText[0]["iii"]); // with string iii - this should not work, iii is not declared
alert( cc_arrNewText[0]["ddd"]); // width string ddd - that's fine

</script>





Mit dem String "elementName" oder "iii" kannst du darauf zugreifen, aber das ist wohl kaum Sinn der Sache..

Bin auf die Lösung gespannt.

unsure.gif
 
Damit
QUOTE (Crazymind @ Fr 12.10.2007, 07:47)
CODE
//var elementId = elem.id;

cc_arrNewText.push({'key': taTmpText});

alert(cc_arrNewText[0]['key']);




definierst Du ein Objekt mit der Eigenschaft 'key' und dem Wert von taTmpText. Du definierst nicht einen Array.

Und bei Objektdefinitionen müssen die Eigenschaftsnamen zur Kompilierzeit bekannt sein, es gibt ja nicht Objekte mit unendlich vielen Eigenschaften, die erst zur Laufzeit generiert werden.

Also muß diese Definition


QUOTE (Crazymind @ Fr 12.10.2007, 07:47)
CODE cc_arrNewText.push({elementId: taTmpText});



zur Kompilierzeit ausgewertet werden, da ist 'elementId' einfach der Name der Eigenschaft. Und


CODE alert(cc_arrNewText[0].elementId);


zeigt den Wert dieser Eigenschaft an.

Daß der Name 1:1 übernommen wird, sieht man, wenn man diesen Code


CODE cc_arrNewText.push({'' + elementId + '': taTmpText});


ausführt und sich die Fehlermeldung näher ansieht: An dieser Stelle sind Operatoren '+' nicht zugelassen.


QUOTE Error: missing : after property id


mit Hinweis auf das '+'.
 
Zurück
Oben