Bei Schleifendurchlauf jedesmal neue Variable verwenden
TheSepp
- javascript
Hallo,
Ich möchte folgendes machen: Bei jedem Durchlauf einer Schleife soll diese automatisch (via alert()) den Wert einer neuen Variable anzeigen. Die Variablen sind nach dem Muster Inhalt1, Inhalt2, ... Ich hoffe, ihr versteht, wie ich das meine.
Hier mein Lösungsansatz:
function blabla () {
var Inhalt1 = "Das ist ein Text ...";
var Inhalt2 = "... hier noch einer ...";
var Inhalt3 = "... und das ist der Letzte.";
for (i = 1; i <= 3; i++) {
var fgh = ['Inhalt' + i];
alert(fgh);
}
}
Aber iwie funktioniert das nicht, denn in den alerts bekomme ich nur die Namen der Variablen, aber nicht deren Wert, den ich ja eigentlich aufrufen möchte.
Wie kann ich es also anfangen, dass ich bei der Abfrage direkt den Wert bekomme? (Oder ist das mit JavaScript überhaupt möglich, dass man Variablen auf diese Weise aufrufen kann?)
Hallo TheSepp,
für Dein Problem solltest Du vll besser ein http://de.selfhtml.org/javascript/objekte/array.htm@title=Array nutzen. Das kann genau das, was Du suchst.
Mit freundlichem Gruß
Micha
für Dein Problem solltest Du vll besser ein http://de.selfhtml.org/javascript/objekte/array.htm@title=Array nutzen. Das kann genau das, was Du suchst.
Ja hast recht. Ich hab' gerade den Wald vor lauter Bäumen nicht gesehen. Also so sieht's jetzt aus:
function blabla () {
var Inhalt1 = "Das ist ein Text ...";
var Inhalt2 = "... hier noch einer ...";
var Inhalt3 = "... und das ist der Letzte.";
var yxc = new Array(Inhalt1, Inhalt2, Inhalt3);
var i = 0;
for (i; i <= (yxc.length - 1); i++) {
var fgh = yxc[i];
alert(fgh);
}
}
Danke nochmal für den Hinweis.
Hallo TheSepp,
kein Problem aber ich hätte er an folgendes gedacht:
var Inhalt = [];
Inhalt[0] = "Das ist ein Text ...";
Inhalt[1] = "... hier noch einer ...";
Inhalt[2] = "... und das ist der Letzte.";
Also kein (zusätzliches) Pseudoarray "yxc", sondern die direkte Datenhaltung im Inhalts-Feld.
Mit freundlichem Gruß
Micha
Oder auch so:
function blabla () {
var i, Inhalt =
[
"Das ist ein Text ...",
"... hier noch einer ...",
"... und das ist der Letzte."
]
;
for ( i=0; i in Inhalt; alert(Inhalt[i++]) ){}
}
Bin halt ein Fan von Abkürzungen...
Mit Abbruchbedingungen wie "i in Inhalt
" muss man beim Durchlaufen von Arrays allerdings aufpassen: Manche Frameworks mögen das nicht.
Und sobald ein Array-Element 'undefined' ist, bricht die for-Schleife ab. Wenn man das nicht will, sollte man sicherstellen, dass für alle Array-Elemente 0...n immer !!Inhalt[n]===true
gilt.
Oder vorsichtshalber doch die klassische Abbruchbedingung i<Inhalt.length;
verwenden.
Gruß, Don P
Mit Abbruchbedingungen wie "
i in Inhalt
" muss man beim Durchlaufen von Arrays allerdings aufpassen: Manche Frameworks mögen das nicht.
Wieso? Inwiefern?
Mathias
Hallo,
Wieso? Inwiefern?
Hmm... gute Frage. Habe mal sowas gelesen, aber damit ist anscheinend nicht wirklich die Abbruchbedingung gemeint, sondern die Verwendung der for...in Schleife in der Form for(i in Inhalt){alert(Inhalt[i])};
, um beim Beispiel zu bleiben.
Es heißt in der Doku zu prototype 1.6, Kapitel 4:
"Many JavaScript authors have been misled into using the for…in JavaScript construct to loop over array elements. This kind of code just won’t work with Prototype."
Das liegt daran, dass so eine for..in Schleife auch alle Eigenschaften des Arrays durchläuft, z.B. auch die über Array.prototype
dazugefügten.
Zum Beispiel wird mit
var i, a=['a','b','c'];
a.neu='d'; // Neue Eigenschaft des Arrays
for(i in a){alert(a[i])}
auch 'd' ausgegeben, obwohl das in keinem Array-Element vorkommt.
Als Abbruchbedingung ist "i in Inhalt
" aber anscheinend wirklich ok, solange man sich bewusst ist, dass die Schleife halt beim ersten undefinierten Array-Element abbricht, also nicht zwangsläufig alle Elemente durchlaufen werden. Das mag nicht immer erwünscht sein.
Aber das muss ich dir, @molily, ja sicher nicht alles erklären, gelle...
Gruß, Don P