2010-06-23 7 views
1

Je cherche à créer un ensemble de tableaux créés dynamiquement et stockés dans un objet. le résultat serait quelque chose de similaire à ce ...stocker un tableau dynamique de valeurs à l'intérieur d'un objet en boucle dans une instruction for

object.array0.length = 5, object.array1.length = 4, etc 

le nom du tableau serait généré à partir d'une boucle basée sur une valeur numérique déclarée ailleurs dans l'application.

Voici le code que j'ai ...

var obj = {}; 
var weekNum = 4; 

for(i=0; i < weekNum.length;i++) { 
    obj['week'+i] = []; 
    obj['week'+i].push(day); 

    console.log('days stored in week0: '+obj.week0.length); 
} 

Ce qui semble se produire est que obj['week'+i] ne se rend pas compte qu'il est un tableau, et la commande de poussée ne semble pas être assez pour le faire penser. Donc, comme une valeur résultante de obj.week0.length est toujours 1 avec la valeur réelle qui vient d'être remplacée à chaque fois par opposition à la matrice en cours d'incrémentation. Le paramètre day dans le code ci-dessus serait transmis à partir d'une autre fonction représentant un jour choisi (lundi, mardi, etc) ... Cependant, la séquence et le nombre de jours passés pourraient différer, mais ne dépassera jamais 5 (mf).

Répondre

1

Cela me semble être un problème logique. Vous n'insérez toujours qu'un jour dans le tableau à moins que day ne représente autre chose.

var obj = {}; 
var weekNum = 4; 

// var was missing :) 
for(var i = 0; i < weekNum.length; i++) { 
    // check if entry exists before creating new. 
    obj['week'+i] = obj['week'+i] || []; 
    // you're always only inserting 1 value inside the week array 
    // don't you want to loop through the number of days 
    // and insert a day entry for *this* week for each day. like this? 
    // days is another array of, hmm.. days 
    for(var j = 0; j <days.length; j++) { 
     obj['week'+i].push(days[j]); 
    } 

    console.log('days stored in week0: '+obj.week0.length); 
} 
+0

Au début, je pensais que cela avait résolu mon problème, mais en y repensant je me rends compte qu'il est très proche de la solution - cependant, une solution n'est pas (encore) ... à toutes fins utiles ... cette boucle for est contenue à l'intérieur d'une fonction ... 'jour' représente une valeur différente chaque fois que la fonction est appelée, mais ce n'est qu'une valeur à la fois. Je voudrais, chaque fois que la fonction est appelée et un nouveau paramètre pour 'day' est passé, que le tableau est ensuite incrémenté et mis à jour avec la nouvelle valeur. Merci. – Jason

+0

@Jason - Le problème est que vous redéclarez la propriété weekN en tant que tableau chaque fois que vous appelez la fonction et que la boucle est exécutée. Sans voir plus de code, je ne fais que lancer des fléchettes à l'aveugle, mais en supposant que le tableau obj soit accessible à votre fonction d'une façon ou d'une autre, vous ne créez un nouveau tableau que s'il n'existe pas déjà. mise à jour de la réponse – Anurag

+0

obj ['week' + i] = obj ['week' + i] || []; Cela a résolu mon problème, j'ai pu continuer à résoudre d'autres domaines du code et maintenant tout fonctionne. Merci! – Jason

0

Il ne change pas, car chaque fois que vous parcourez la boucle, vous réinitialisez la valeur à [], puis appuyez dessus. Essayez de déplacer le obj['week'+i] = [] hors de la boucle.

+0

Mauvais. 'i' est la variable tableau. – SLaks

+0

Oh, c'est vrai. Bon point. Il est quand même correct dans l'esprit ... Un nouveau tableau est créé et un seul élément pousse chaque boucle. Probable, il devrait être 'obj ['week'] = []' en dehors de la boucle au lieu de 'obj ['week'] + i] = []'. – jdmichal

Questions connexes