2009-12-23 12 views
2

Désolé si mon titre est difficile à comprendre. Laisse-moi expliquer.Javascript: traverser un tableau profond de 2 niveaux avec "pour" ne produit pas un autre tableau

Pour utiliser cet exemple de ma structure:

Array 
(
[2] => Array 
    (
     [0] => stdClass Object 
      (
       [category_id] => 2 
       [category_name] => women 
       [project_id] => 1 
       [project_name] => Balloons 
      ) 

    ) 

[1] => Array 
    (
     [0] => stdClass Object 
      (
       [category_id] => 1 
       [category_name] => men 
       [project_id] => 2 
       [project_name] => Cars 
      ) 

     [1] => stdClass Object 
      (
       [category_id] => 1 
       [category_name] => men 
       [project_id] => 3 
       [project_name] => Houses 
      ) 

    ) 

Ensuite, une fois que j'ai, je l'envoyer à eval'd par javascript (qui est réussie). Console.log montre en fait que mon json eval'd est en fait maintenant un objet. Maintenant, si je console.log (myArray [2]), il le montrera comme un tableau qui contient un autre tableau. Ce qui est également correct

MAIS .. si j'essaie de le faire:

for (item in myArray[2]) { 
... 
} 

ou ceci:

newVar = myArray[2] 
for (item in newVar) { 
... 
} 

"item" ne contient pas le tableau comme il se doit. il contient une chaîne égale à la clé des sous-matrices. Lequel dans ce cas est "0"

Qu'est-ce que je manque ici les gars? ! :(

Merci pour l'aide

+0

en aparté, la structure de votre exemple est vraiment difficile à lire Tout ce que vous devez dire est « un tableau de tableaux » ou « tableaux imbriqués » et il sera clair –

Répondre

3

Vous avez déjà dit quel était le problème: « item » ne contient pas le tableau ... il contient une chaîne égale clé des sous-réseaux Donc, vous venez. besoin d'utiliser cette clé.

var subarray; 
for (var i in myArray) { 
    subarray = myArray[i]; 
    for (var j in subarray) { 
     ... // do stuff with subarray[j] 
    } 
} 
+1

. Si vous utilisez des bibliothèques JavaScript qui peuvent remplacer les prototypes Array/Object, vous devez également vérifier hasOwnProperty: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Global_Objects:Object:hasOwnPr operty – Annie

+0

Bon point. En outre, si vous développez uniquement pour FF, il existe un moyen d'itérer comme vous le souhaitiez auparavant - utilisez 'forEach': https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/ForEach ou 'pour chaque ... in': https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for_each...in –

+0

Merci pour l'aide! Ça fonctionne maintenant. J'ai toujours utiliser une seule boucle for mais j'accède à ma liste de valeurs donc: myArray [i] ['project_name'] – Jeff