J'ai un objet JSON (bien c'est ce que je pensais avoir défini) et j'essaie d'accéder aux valeurs d'un tableau en son sein. Il est en boucle trois fois ce qui est correct, mais la valeur de img.iName
est toujours undefined
Javascript: ne pas comprendre la boucle sur la matrice associative
Qu'est-ce que j'ai mal compris?
<div id="dbgDIV">Debug Div<br></div>
<script>
// imgs as a JSON array
var gallery = {"imgs":
[ // Height and Width to be added
{"iName":"File1.jpg", "tName": "File1_th.jpg","cap":"This is a Caption for File1"},
{"iName":"File2.jpg", "tName": "File2_th.jpg","cap":"This is a Caption for File2"},
{"iName":"File3.jpg", "tName": "File3_th.jpg","cap":"This is a Caption for File3"}
],
"imgCount":"3"
};
var dbgDIV = document.getElementById("dbgDIV");
for (var img in gallery.imgs) {
dbgDIV.innerHTML = dbgDIV.innerHTML + "img=" + img.iName + "<br>";
console.log(img.iName);
}
</script>
utilisation 'in' » pour la liste d'objets. pour ce tableau, utilisez normal pour la boucle –
Vous trouverez extrêmement utile d'apprendre à utiliser le débogueur JavaScript intégré à tous les navigateurs. En effectuant un seul pas dans votre boucle, vous découvrirez immédiatement que 'img' dans la boucle n'était pas une référence à un élément de tableau comme vous le pensiez, mais plutôt un index _array_, c'est-à-dire' 0', '1', ou' 2 '. Prenez le temps d'apprendre à utiliser les outils de développement et le débogueur JavaScript; vous le trouverez très utile. Voici un [guide des Chrome DevTools] (https://developer.chrome.com/devtools). –
Notez également que JavaScript et JSON n'ont pas de "tableaux associatifs". Ils ont des objets, et ils ont des escargots. 'gallery.imgs' est un tableau, et comme les différentes réponses le soulignent, vous ne devriez pas utiliser une boucle' for'..'in' sur un tableau. Mais l'utilisation de 'for'..'in' n'était pas le problème réel ici! La vraie raison pour ne pas utiliser 'for'..'in' sur un tableau est que si' Array.prototype' avait été étendu, ces propriétés supplémentaires apparaîtraient dans votre boucle. Mon commentaire ci-dessus explique la raison réelle du problème. –