本記事では、JavaScriptでfor文の中にfor文を使用している2重ループを抜け出す方法について解説しています。
JavaScriptの学習におすすめ参考書
改訂3版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
先輩くん
10万部突破したJavaScriptの本が大幅増補改訂し7年ぶりに発売されたよ!
後輩ちゃん
最新の基本文法から、開発に欠かせない応用トピックまで学ぶことが出来るよ!
綺麗なコードが書けるようになる!
リーダブルコード-より良いコードを書くためのシンプルで実践的なテクニック
先輩くん
より良いコードを書きたい人におすすめの本だよ!
後輩ちゃん
10以上前の書籍ですが、内容は今でも役に立つものばかりです!
普通のbreakでは2重ループを抜け出せない!?
繰り返し処理を抜けるためには、breakを使いますがいつも通りの書き方では抜け出すことは出来ません。
for (let i = 1; i <= 3; i++) { // ループ①
console.log(`外枠for文のループ処理回数: ${i}`);
for (let j = 1; j <= 3; j++) { // ループ②
if (j === 2) break;
}
}
/* コンソールログ *
* 外枠for文のループ処理回数: 1
* 外枠for文のループ処理回数: 2
* 外枠for文のループ処理回数: 3
*/
上記コードの想定している挙動は、コンソールログに「外枠for文のループ処理回数: 1」のみ出力されるはずですが、実際はコンソールログにループ処理回数が3回表示されています。
このような挙動になる理由は、breakが記述されたループブロックのみ抜けるという性質を持っているからです。今回の場合だと、breakが記述されたループブロックは上記コードの「ループ②」に該当するため「ループ①」を抜けることが出来ません。
ラベルを付与する
2重ループを抜けるためには、抜け出したいループ処理の先頭に任意のラベルを付与させます。先ほど紹介したサンプルコードの場合「ループ①」の先頭にラベル名を付与します。
ラベル名の付け方は以下のとおりです。
ラベル名:
先輩くん
ラベル名を付けたサンプルコードは以下のとおりだよ!
sampleLoop: for (let i = 1; i <= 3; i++) {
console.log(`外枠for文のループ処理回数: ${i}`);
for (let j = 1; j <= 3; j++) {
if (j === 2) break sampleLoop;
}
}
/* コンソールログ *
* 外枠for文のループ処理回数: 1
*/
sampleLoopというラベル名を付与させ、breakの後にラベル名を指定しています。コンソールログを確認すると「外枠for文のループ処理回数: 1」のみ表示されているため、2重ループを抜け出せていることが確認できます。