JavaScriptのforEach()を途中で終了(抜け出す)する方法
JavaScriptのforEach()メソッドは、breakやcontinueによるループの中断・脱出に対応していません。例外(Exception)をスローする以外に、ループの途中で処理を終了させる手段が用意されていないのが特徴です。
そのため、条件を満たした時点でループを抜けたい場合は、別の手法を使うのが一般的です。ここでは代表的な3つの方法を紹介します。
1. lodashの_.findを使う
ユーティリティライブラリ「Lodash」の_.findを使うと、条件に合致する要素が見つかった時点で自動的にループを終了します。
_.find([1, 2, 3, 4], (element) => {
// ここで条件を判定
if (element === 2) {
return true;
}
// 各要素に対して行いたい処理
// ...
});
2. 例外をスローしてforEachを抜ける
try...catchと組み合わせて、意図的に例外を投げることでforEachの処理を強制的に中断できます。
try {
[1, 2, 3, 4].forEach((element) => {
// ここで条件を判定
if (element === 2) {
throw new Error();
}
// 各要素に対して行いたい処理
// ...
})
} catch (e) {
// 何もしない
}
動作はしますが、例外を制御フローとして使うのは可読性やパフォーマンスの面で推奨されません。あくまで最終手段と考えましょう。
3. some()・every()・for...of を使う(推奨)
標準の配列メソッドでも、ループを途中で止めることが可能です。
- Array.prototype.some(): コールバックが
trueを返した時点でループを終了します。 - Array.prototype.every(): コールバックが
falseを返した時点でループを終了します。 - for...of文:
breakやcontinueが自由に使えるため、最も柔軟で直感的です。
// for...of の例:breakでループを抜けられる
for (const element of [1, 2, 3, 4]) {
if (element === 2) {
break;
}
// 各要素に対して行いたい処理
}
まとめ
forEach()は途中で抜けられないため、早期終了が必要なケースではfor...ofやsome()/every()、あるいはLodashの_.findなど、目的に合った代替手段を選ぶのがベストプラクティスです。
-
JavaScriptで配列をreduceする方法|reduce()メソッドで配列要素を合計する
JavaScriptのreduce()メソッドは、配列の各要素を先頭から順に処理し、その結果を1つの値にまとめる(畳み込む)ための配列メソッドです。数値の合計を求めるだけでなく、配列からオブジェクトを組み立てたり、条件に応じてデータを集約したりと、幅広い場面で活用されています。reduce()メソッドの基本構文 { return 戻り値; }, 初期値);accumulator(アキュムレータ):直前のコールバック関数が返した値(累積値)。最初のループでは初期値、または配列の第1要素が代入されます。currentValue:現在処理している配列の要素。初期値:累積値の出発点となる値。省略し
-
JavaScriptでプロパティにアクセスする3つの方法|ドット記法・角括弧・分割代入の使い分け
JavaScriptでオブジェクトのプロパティにアクセスする3つの方法 JavaScriptには、オブジェクトが持つプロパティ(キーと値のペア)を参照するための方法が主に3つあります。どれも同じ値を取得できますが、それぞれ特徴や向いている場面が異なるため、正しく使い分けられるとコードの可読性と保守性が大きく向上します。 ドット記法:object.property 角括弧記法:object[property] 分割代入:let {property} = object 1. ドット記法(object.property) 最もシンプルで読みやすい記法です。obj.a のようにピリオドでつなぐだけ