JavaScriptでは、配列をループ処理できるforEach
メソッドがあります。
const array = [1, 2, 3, 4, 5];
array.forEach((value, index) => {
console.log(value, index);
});
よく勘違いされるのですが、このforEach
メソッドは、break
やcontinue
を使ってループを制御することができません。
しかし、特定の条件のときにループ処理を中断したり、次のループ処理に移ったりしたいこともありますよね。
そこで本記事では、forEach
メソッドでbreak
やcontinue
を使う方法を解説します!
また、本記事の著者は以下のような経験を持っており、わかりやすくプログラミングを教えるプロですのでご安心ください!
- 現役のフルスタックWebエンジニアとして活躍中
- プログラミングスクールで教材を執筆した経験アリ
- 副業でプログラミングスクール講師をしている教育のプロ
break/continueとは?
まず、初心者の方向けにbreak
やcontinue
について簡単に説明します。
breakとは:ループ処理を中断する
break
は、ループ処理を中断するためのキーワードです。
JavaScriptでは、for
文やwhile
文などのループ処理を行う際に、break
を使ってループ処理を中断することができます。
for (let i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
}
上記のコードでは、i
が5
のときにbreak
が実行されるため、i
が5
のときにループ処理が中断されます。
continueとは:次のループ処理に移る
continue
は、ループ処理を中断せずに次のループ処理に移るためのキーワードです。
JavaScriptでは、for
文やwhile
文などのループ処理を行う際に、continue
を使ってループ処理を中断せずに次のループ処理に移ることができます。
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue;
}
console.log(i);
}
上記のコードでは、i
が5
のときにcontinue
が実行されるため、i
が5
のときにループ処理が中断されずに次のループ処理に移ります。
JavaScriptのforEachではbreak/continueは使えない
先述の通り、forEach
メソッドではbreak
やcontinue
を使ってループ処理を制御することができません。
使えるのは、JavaScriptのfor
文やwhile
文などです。
実際、使ってみるとどうなるかを見てみましょう。
const array = [1, 2, 3, 4, 5];
array.forEach((value, index) => {
if (value === 3) {
break;
}
console.log(value, index);
});
一見、break
が使えているように見えますが、実際に実行してみるとエラーが発生します。
Uncaught SyntaxError: Illegal break statement
continue
も同様のエラーが発生します。
forEachでbreak/continueのようにループ処理を制御する方法
forEach
メソッドは、配列の各要素に対して関数を実行しますが、break
やcontinue
のような制御構造を直接使うことはできません。
しかし、いくつかのテクニックを使うことでこれらの機能を代替することが可能です。
breakの代わりにthrowを使って例外を発生させる
forEach
メソッド内で特定の条件に達したときにループを中断したい場合、例外処理を利用する方法があります。
これはthrow
キーワードを使って例外を発生させ、catch
ブロックでその例外を捕捉することで実現します。
const array = [1, 2, 3, 4, 5];
try {
array.forEach((value, index) => {
if (value === 3) {
throw 'break'; // 特定の条件で例外を投げる
}
console.log(value, index);
});
} catch (e) {
if (e !== 'break') {
throw e; // 予期せぬエラーの場合は再スロー
}
// ここに中断後の処理を記述
}
この方法は、特定の条件でループを即座に中断させることができます。
ただし、例外処理をこのように使うことは一般的ではなく、他のコードの読み手にとっては予期せぬ挙動となる可能性があるため、使用は慎重に行うべきです。
continueの代わりにreturnを使ってスキップする
forEach
メソッド内で特定の条件の場合にそのループ処理をスキップしたい場合、return
文を使うことで実現できます。
これはforEach
のコールバック関数内でのみ動作し、ループを中断するわけではない点に注意が必要です。
array.forEach((value, index) => {
if (value === 3) {
return; // 特定の条件で現在のループ処理をスキップ
}
console.log(value, index);
});
この方法は、ループ全体を中断するのではなく、特定の条件下でのみ現在のループ処理をスキップし、次のループ処理に進むために使用されます。これによりcontinue
に似た動作を実現できます。
まとめ
forEach
メソッドでbreak
やcontinue
のようにループ処理を制御するには、throw
とreturn
を活用する方法があります。
しかし、これらの方法は通常のループ制御とは異なるため、コードの読み手にとっては混乱を招く可能性があることを理解しておく必要があります。
そのため、無理せず for
やwhile
で済ませられないかも検討しておくと安心です。
JavaScriptを効率的に身につける勉強法は?
JavaScript には興味があっても、プログラミング学習をはじめたばかりであれば、以下のような疑問を持つかもしれません。
- JavaScript を身に付けてエンジニアになるには何をすればいい?
- 何から勉強すればいいんだろう?
- 効率よく勉強するには?
JavaScriptは学ぶべき内容が非常に多いため、勉強法の選び方を間違うと時間・労力・お金が無駄になってしまいます…。
そのため、こちらの記事を参考に、ご自身に最適な学習方法を選んでみませんか?