2010-06-22 5 views
0

J'aimerais créer dynamiquement et référencer certaines variables à la volée, mais je ne comprends pas comment.Utilisation d'une variable dynamique dans une instruction for

Voici ce que je pense que «devrait» fonctionner, mais je sais pas.

var weeks = 4; 
for(i=0; i<weeks.length;i++){ 
    var 'week_'+i = valueFromXML; 
} 



function wtFn(){ 
    'week_'+i.splice(-1, 1); 
    if('week_'+i.length <=0){ 
    $(this).parent().parent().slideUp(); 
    } 
} 

Je suis ouvert aux suggestions. Merci d'avance.

Répondre

2

Vous ne pouvez pas déclarer dynamiquement des variables sans utiliser eval, ce qui n'est pas considéré comme une bonne pratique.

Je vous recommande d'utiliser un objet pour stocker vos valeurs en tant que propriétés:

var weeks = 4; 
var obj = {}; 
for(var i = 0; i< weeks; i++){ 
    obj['week_'+i] = valueFromXML; 
} 

Ensuite, vous pouvez accéder aux propriétés comme:

alert(obj['week_'+i]); 
1

Vous voulez utiliser des tableaux.

var weeks = new Array(); 

for(i=0; i < weeks.length;i++) { 
    weeks[i] = valueFromXML; 
} 
+0

Je pense que ce que je cherche à faire est en fait de créer un objet à la volée, tout comme la réponse ci-dessus, mais aussi de créer dynamiquement une série de tableaux à l'intérieur de l'objet. pour (i = 0; i Jason

+1

@Jason: cela devrait fonctionner ... – Shog9

+0

@ Shog9 - cela semble fonctionner, mais je ne peux pas avancer la position du tableau pour remplir le point suivant ... tempVar ['week' + i]. push (jour) doit être le même que tempVar.week0 [i] .push (day), par exemple. mais je ne peux pas comprendre comment ajouter correctement le [i] pour la position du tableau. – Jason

0

Comme indiqué par d'autres, les tableaux ou les objets sont la voie à suivre. Mais si vous le devez vraiment, vous pouvez créer des variables dynamiques, ou plutôt créer des membres de l'objet global, window. En supposant que cela est exécuté dans un navigateur, faites ceci:

var weeks = 4; 
for(i=0; i<weeks.length;i++){ 
    var window['week_'+i] = valueFromXML; 
} 



function wtFn(){ 

    window['week_'+i].splice(-1, 1); 
    if(window['week_'+i].length <=0){ 
    $(this).parent().parent().slideUp(); 
    } 
} 

Cela fonctionne parce que dans un navigateur, window['xyz'] retournera le même objet que xyz (qui est en supposant xyz n'a pas été créé dans une fonction en utilisant le mot-clé var).

Questions connexes