var matrix = [[10, 20, 30, 40], [22, 10, 12, 14], [16, 18, 42, 22]];
var result = "",
i, ii, c, cc;
for (i=0, c=matrix.length; i<c; i++) {
for (ii=0, cc=matrix[i].length; ii<cc; ii++) {
result += matrix[i][ii] + " ";
}
if (matrix[i + 1]) { // S'il y a encore un sous-tableau à parcourir, on ajoute un retour à la ligne
result += "\n";
}
}
alert(result);
Un tableau à deux dimensions est un tableau qui contient lui-même des tableaux. On aurait peu indenter le tableau
comme ceci :
var matrix = [
[10, 20, 30, 40],
[22, 10, 12, 14],
[16, 18, 42, 22]
];
Pour en afficher le contenu, il suffit de le parcourir une première fois afin d'accéder à chaque "sous-tableau" et ensuite
d'en lire le contenu avec une seconde boucle.
Notez que les variables utilisées dans la seconde boucle for ne doivent pas être déclarées dans le for, afin d'éviter
que les variables ne soient redéclartées à chaque tour de boucle. Ccei est donc à éviter :
for (var i=0, c=matrix.length; i<c; i++) {
for (var ii=0, cc=matrix[i].length; ii<cc; ii++) {
// ...
}
}
Il est toutefois possible de déclarer les variables de la seconde boucle dans le premier for, comme ceci :
for (var i=0, ii, c=matrix.length, cc; i<c; i++) {
for (ii=0, cc=matrix[i].length; ii<cc; ii++) {
// ...
}
}
J'aime personnelement cette solution.
Concernant le nommage des variables de boucle du second for
, j'ai opté pour ii
et cc
.
Ca permet de fin faire la différence entre les indices (ii est forcément utilisé dans la deuxième boucle).
S'il y avait une troisième boucle, j'aurais utilisé iii
et ccc
.