Amélioré pour la boucle dans le Tableau 2D - JavaScript
J'ai créé le tableau 2D en Javascript
//Create basic linear array
var ImgArray = new Array(4);
//Do the 2D array for each or the linear array slots
for (i=0; i < 4 ; i++) {
ImgArray[i] = new Array(4)
}
Maintenant, je veux parcourir à l'aide de 2 'renforcée pour boucles'. Mais je suis coincé sur la façon d'utiliser la boucle comme il y a seulement ImgArray
déclaré tel. Par exemple;
//Load the images
for(var i in ImgArray) {
for( ??? ) { //How would i do this? What do i state as an array?
///...
}
document.write("<br>");
}
Tout conseiller bien apprécié
- Aussi: arrêtez d'utiliser
document.write()
- c'est assez mal 🙂 - document.écrire, c'est OK, "renforcée pour boucles" (pour...dans le tableau) ne l'est pas.
- Il n'y a rien de mal avec
document.write
, utilisé de manière appropriée. - merci, mais ce qu'il faut utiliser à la place?
- Si vous utilisez
var a = new Array(4)
, rappelez-vous qu'il va créer un tableau de longueur 4, mais qu'il ne contient pas tous les éléments,a[1]
sera de retourundefined
, maisa.length
sera de retour 4. - En bas, @Carlos -
document.write()
est une de ces choses qui est ce qu'il fait, et il n'est pas intrinsèquement "mauvais", mais c'est une façon de faire les choses qui ont vraiment des appels pour une nouvelle approche. La meilleure façon de faire les choses, c'est par la manipulation DOM après le document est chargé. @Tim la clé, il est utilisés de façon appropriée.
Vous devez vous connecter pour publier un commentaire.
En supposant que le tableau que vous avez créé, la boucle ressemble à ceci:
C'est parce qu'il n'y sont pas les tableaux à deux dimensions en JavaScript. (En fait, même les tableaux ne sont pas vraiment des tableaux, mais n'allons pas y aller.) Il y a des "tableaux", et une entrée de tableau peut être un autre tableau, mais un tableau d'entrée peut être plus longue ou plus courte que les autres. Afin de vous extraire de ce tableau et une boucle dans son longueur, qui peut être différente de celle des autres dans la même "dimension".
Noter que je n'ai pas utilisé
for..in
ci-dessus. Ne pas utilisationfor..in
à boucle à travers les tableaux, sauf si vous savez vraiment ce que vous faites; les détails ici. (Si vous ne savez vraiment ce que vous faites et prenez les précautions adéquates, c'est bien, mais votre cité de code n'est pas de prendre les précautions nécessaires.)for..in
ne pas itérer les indices d'un tableau, il énumère les noms de propriété d'un objet.Hors-sujet #1: En JavaScript, la convention (qui vous êtes libre de les ignorer) est à utiliser uniquement des majuscules initiales (
ImgArray
) pour les fonctions constructeur.Hors-sujet n ° 2: Vous pourriez regarder à l'aide du tableau des littéraux (
[entry, entry, entry]
) plutôt que denew Array(...)
, mais cela dépend de ce que vous faites.Hors-sujet n ° 3: C'est une très mauvaise idée de s'appuyer sur point-virgule insertion (comme avec votre
ImgArray[i] = new Array(4)
ligne). Assurez-vous de mettre dans les points-virgules là où ils sont nécessaires, ou vous verrez que vous ne pouvez pas minifier vos scripts correctement, et/ou que vous combattrez bizarre de bugs que de perdre votre temps. 🙂for ... in
pour itérer sur tous les tableaux. (votre code dit que, mais je pensais que je viens de l'ajouter dans les mots)imgArray[1][3]
.imgArray[1]
retourne un tableau etimgArray[1][3]
accède à la quatrième élément de ce tableau.imgArray[1]
) lors de la traversée de son contenu (c'est pourquoi j'ai leentry
variable ci-dessus). Toujours, cependant, aucune raison que vous ne pouvez le faire que lorsque vous n'êtes pas en boucle.Ce n'est pas une "enhanced
for
boucle". Vous ne devriez pas être à itérer Tableau d'instances de cette façon, de toute façon, du moins pas quand vous êtes en les traitant du point de vue sémantique, en tant qu'entier-tableaux indexés.Utiliser votre original
approche (et n'oubliez pas
var
). Aussi, ne vous embêtez pas avecIl suffit d'écrire
vous avez juste à faire une boucle tant que tels
hasOwnProperty
, par précaution