home
twitter
ページトップへ
目次
  • JavaScriptにおける「ループ処理」とは?
  • breakを使うとどうなるのか?
  • 実際にbreakを使う
  • for文でbreakを使う
  • while文でbreakを使う。
  • continueを使うとどうなるのか?
  • 実際にcontinueを使う
  • for文で「continue」を使う
  • while文で「continue」を使う。
  • for文とwhile文での「continue」の挙動の違い
  • ラベルを使って外側のループを制御する。
  • 具体例でラベルの使い方を解説
  • どうしたらいいのかという具体例
  • まとめ
about
categories
page
archive
皇帝ペンギンブログ

2022/10/01 (更新日:2024/07/11)

【JavaScript】複数にネストされたループの制御【break/continue】

Categories > JavaScriptの基本編
JavaScriptで、複数にネストされたループから抜けたり、イテレーションを上げたりと、制御するにはどうすればいいの?

この記事では、JavaScriptの「ループ処理」を簡潔に記述する「for文」や「while文」を制御するための「break」や「continue」などの使い方を解説します。

「break」や「continue」を使うことで、より複雑なループ処理を行うことが可能になります。

さらにこの記事の後半では、「ラベル」を使って、複数にネストされた「外側のループから抜ける方法」についても解説しています。

では本題へ入っていきます!

目次
非表示
  • JavaScriptにおける「ループ処理」とは?
  • breakを使うとどうなるのか?
  • 実際にbreakを使う
  • for文でbreakを使う
  • while文でbreakを使う。
  • continueを使うとどうなるのか?
  • 実際にcontinueを使う
  • for文で「continue」を使う
  • while文で「continue」を使う。
  • for文とwhile文での「continue」の挙動の違い
  • ラベルを使って外側のループを制御する。
  • 具体例でラベルの使い方を解説
  • どうしたらいいのかという具体例
  • まとめ

JavaScriptにおける「ループ処理」とは?

JavaScriptにおける「ループ処理」とは、「繰り返し同じ処理を実行するコード」のことを指します。

具体的には、下記のことを指します。

  • for文
  • while文
  • do while文

他にもありますが、JavaScriptにおける基本的なループはこれらです。

breakを使うとどうなるのか?

break を使うことでループを止めることができます。

ループを抜けて、ループの下の行のコードから実行されます。

実際にbreakを使う

具体例を見せた方が分かりやすいと思うので、実際にbreakを使ってみます。

for文でbreakを使う

for (let i = 0; i < 10; i++) {
    console.log( i );
    if ( i == 4 ) {
        break;
    }
}
//  0 1 2 3 4

このように、イテレーションのiが順番にコンソールに出力されていますが、「i==4」となる時に「break」を使いました。

すると、for文のループはそこで止まっています。

便利ですね。

while文でbreakを使う。

let i = 0;
while ( i < 10 ) {
    console.log( i );
    i++;
    if ( i == 5 ) {
        break;
    }
}
//  0 1 2 3 4

このように、「while文」でも「break」が使うことが可能です。

continueを使うとどうなるのか?

「continue」を使うと、「continue」が呼ばれたタイミングでそこから次のイテレーションに飛びます。

「break」でループ自体は止めたくない場合に使えますね。

実際にcontinueを使う

「continue」も実際に使っていきます!

for文で「continue」を使う

for (let i = 1; i < 11; i++) {
    if ( i % 2 == 0 ) {
        continue
    }
    console.log( i );
}
//  1 3 5 7 9

この様に書くことで、iを2で割った余りが0の時は、「continue」で次のイテレーションにスキップしています。

つまり、1~10までの中の整数で奇数の数字だけが出力されています。

「continue」も上手く使えば、便利ですね。

while文で「continue」を使う。

let i = 0;
while ( i < 10 ) {
    i++;
    if ( i % 2 == 0 ) {
        continue;
    }
    console.log( i );
}
//   1 3 5 7 9

この様に上手く機能しています。

for文とwhile文での「continue」の挙動の違い

for文で「continue」が実行されると、その時点からイテレーションが1上がり、ループの1番上の行からまた命令文が実行されていきます。

while文もここは同じで「continue」が実行されたタイミングで「ループを続けるかどうか」が評価されて、ループの1番上に戻されます。

なので、「continue」よりも下に「イテレーション変数を上げる命令」が書かれている場合「無限ループ」となってしまいます。

let i = 0;
while ( i < 10 ) {
    if ( i % 2 == 0 ) {
        continue;
    }
    console.log( i );
    i++;
}
// 無限ループ

このように「i++」が「continue」よりも下にあるので、イテレーションに使っている変数が変更されないまま、「ループを続けるかどうか」が評価されるため、「無限ループ」となります。

細かいところですが、予期せぬバグがでないためにも、重要ですね。

ラベルを使って外側のループを制御する。

任意の名前: for (;;) {
    for (;;) {
        break (breakを適用したいループの名前);
    }
}

このようにforなどのループの前に「: (コロン)」を使って「任意の名前」をつけることができます。

そして「break」や「continue」を適用させたいループの名前と一緒に書くことで、そこにピンポイントで効かせることができます。

具体例でラベルの使い方を解説

これも実際に見た方が使い方が分かると思うので、具体例を挙げますね。

for文などのループ中にfor文などのループがあるような二重のループを考えます。

また、入れ子になって一段階コードが深くなることを「ネスト」と呼びます。

そのネストされたループの外側を内側から制御する方法について解説します。

「50から100までの素数をコンソールに出力する」ことを考えていきます。

for ( let i = 50; i < 100; i++ ) {
    for ( let j = 2; j < i; j++ ) {
        if ( i % j == 0 ) {
            continue;
        }
    }
    console.log( i );
}

一見このようなプログラムで出力できそうですが、これだと50から100までの全ての数字が出力されてしまいます。

どうしたらいいのかという具体例

roop: for ( let i = 50; i < 100; i++ ) {
    for ( let j = 2; j < i; j++ ) {
        if ( i % j == 0 ) {
            continue roop;
        }
    }
    console.log( i );
}
//  2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

このように書くことで、外側のループに対して「continue」を適用させられます。

結果もしっかり50から100までの間の素数を出力できています。

まとめ

この記事では、JavaScriptにおける「break」「continue」の使い方を解説しました。

「break」を使うことでループから抜けることが可能で、「continue」を使うことでループの次のイテレーションに飛ばすことが可能です。

また、ラベルを使うことで、ループに名前をつけて、ネストされたループの中から任意のループに対して、「break」や「continue」を使うことができます。

最後まで読んでくれてありがとうございました!

これからもプログラミングに関する記事や、僕の興味があることについて記事を書いてシェアしていくので、もしよかったら僕のTwitterのフォローもお願いします!

Twitterで記事の更新や、日々考えたことを呟いています!

ではでは!

自分のロゴ!

皇帝ペンギン

全力で、書きます。
少しでもお役に立てたら幸いです。
楽しんで読んで下さい 。-_- 。
よろしくお願いします!

x(旧twitter) youtube
Categories
  • トップへ
  • ITパスポート (1)
  • programming (168)
    • CSSのアニメーション編 (26)
    • CSSのグリッドレイアウト編 (1)
    • CSSのセレクター編 (58)
    • CSSのフレックスボックス編 (1)
    • CSSのメディアクエリー編 (7)
    • CSSの基本編 (34)
    • HTMLのformタグ編 (1)
    • HTMLの基本編 (3)
    • JavaScriptの入門編 (30)
    • JavaScriptの基本編 (5)
    • Web制作をする環境を整えよう! (1)
  • Uncategorized (23)
  • VScode (1)
  • おすすめ商品! (1)
  • クラロワ (2)
  • マーケティング (17)
  • 大学生活 (7)
  • 心理学 (9)
  • 映画 (1)
  • 法学 (4)
  • 経済学 (4)
  • 読書 (7)
Pages
  • プライバシーポリシー
  • 免責事項
  • プロフィール
Archive
  • 2025年3月 (1)
  • 2025年1月 (9)
  • 2024年12月 (13)
  • 2024年11月 (5)
  • 2024年10月 (10)
  • 2024年9月 (15)
  • 2024年8月 (5)
  • 2024年7月 (6)
  • 2024年6月 (5)
  • 2024年5月 (10)
  • 2024年4月 (24)
  • 2024年3月 (11)
  • 2024年2月 (6)
  • 2024年1月 (10)
  • 2023年12月 (4)
  • 2023年11月 (3)
  • 2023年10月 (2)
  • 2023年9月 (3)
  • 2023年8月 (6)
  • 2023年7月 (3)
  • 2023年6月 (8)
  • 2023年5月 (2)
  • 2023年3月 (1)
  • 2023年2月 (1)
  • 2022年10月 (2)
  • 2022年9月 (2)
  • 2022年8月 (8)
  • 2022年7月 (2)
  • 2022年6月 (6)
  • 2022年5月 (9)
  • 2022年4月 (2)
  • 2022年2月 (4)
  • 2021年12月 (1)
  • 2021年11月 (4)
  • 2021年10月 (8)
  • 2021年9月 (14)
  • 2021年8月 (6)
  • 2021年6月 (1)
  • 2021年5月 (2)
  • 2021年4月 (1)
  • 2021年3月 (1)
  • 2021年2月 (2)
  • 2020年10月 (1)
  • 2020年7月 (1)
  • 2020年4月 (1)
  • 2020年1月 (1)
  • 2019年12月 (2)
© Copyright Syuta Chiba, 2019 All Rights Reserved.