解説
ループ処理はネストさせることができます。その際は、ループを管理する変数は、入れ子のそれぞれで別の物にしなければ、意図しない動作になってしまいます。
// 3×3で9回処理をしたい
for (i = 0; i < 3; i ++) {
for (i = 0; i < 3; i ++) {
document.write(i);
}
}
012
// 3×3で9回処理をしたい
for (i = 0; i < 3; i ++) {
for (j = 0; j < 3; j ++) {
document.write(i);
}
}
000111222
ループ処理のネストは、多次元配列と相性がよいです。多くの場合で、多次元配列のネストした値を利用する目的で使用されます。
また、ループ処理がネストした場合「break」や「continue」は現在処理しているループに対して作用します。
for (~) {
for (~) { ←このループに作用
処理1
break; 外へ
処理2
}
}
もし、外側のループに対して「break」や「continue」を使いたい場合は、ラベルを使って対象を指定します。
outer:
for (~) { ←このループに作用
for (~) {
処理1
break outer; 外へ
処理2
}
}
サンプル
ループ処理のネストを使った処理を、JavaScriptで簡単に書いてみます。
<html>
<head>
<title>「ループ処理のネスト」のサンプル</title>
</head>
<body>
<pre><script type="text/javascript">
// 二次元配列の初期化
var arr = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
];
// ループ処理のネスト
for (var i = 0; i < arr.length; i ++) {
var sum = 0;
for (var j = 0; j < arr[i].length; j ++) {
var cell = arr[i][j];
sum += cell;
document.write(cell + ", ");
}
document.write("合計 " + sum + "\n");
}
</script></pre>
</body>
</html>
0, 1, 2, 合計 3 3, 4, 5, 合計 12 6, 7, 8, 合計 21
