JavaScriptで配列を配列を処理するとき。
「for文ってちょっと面倒じゃない?」
「もっと簡単に書けないの?」
と思ったことはありませんか?
そんなときに便利なのがforEachです。
これまで学んだ「JavaScriptのfor文」でも繰り返し処理は可能ですが、forEachを使えば、配列(Array)の中身をよりスッキリと、読みやすく処理することができます。
本記事では、forEachの基本から、for文との決定的な違い、そして「使ってはいけない場面」までを詳しく解説します。
forEachとは?
forEachとは、「配列の要素を一つずつ取り出して、順番に処理を実行する」ための配列専用のメソッドです。
例えば、クラス全員のテスト結果が配列に入っているとき、「一人ずつ名前を呼び出して点数を表示する」といった処理を、機械的に、かつスマートに行うことができます。
これまでのfor文は「1番目、2番目……」と「回数」を数えていましたが、forEachは「配列の中身がなくなるまで、全部やって!」というスタンスです。
for文との違いを徹底比較
「繰り返しができるなら、どっちを使っても同じじゃないの?」と思うかもしれません。しかし、書き比べてみるとその「読みやすさ」に大きな差があることがわかります。
for文で書く場合
まずは、以前学んだ「JavaScriptのfor文」の書き方を見てみましょう。
const fruits = ["りんご", "バナナ", "みかん"];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
for文の場合、「カウンター変数 i の準備」「条件(配列の長さまで)」「 i を増やす」という3つの手順を自分で管理し、さらに fruit[i] と指定して中身を取り出す必要があります。
forEachで書く場合
同じ処理をforEachで書くと、こうなります。
const fruits = ["りんご", "バナナ", "みかん"];
fruits.forEach(function(fruit) {
console.log(fruit);
});
「カウンター変数」や「長さのチェック」が一切消えました。forEachが裏側で勝手に「1番目から最後まで」をループしてくれるからです。
違いまとめ
| 項目 | for文 | forEach |
|---|---|---|
| 対象 | 配列以外(数値など)もOK | 配列専用 |
| 記述量 | やや多い(iなどの管理が必要) | 少ない(スッキリ書ける) |
| 読みやすさ | 構造が複雑になりやすい | 直感的で分かりやすい |
| 中断(break) | できる | できない |
forEachの基本的な使い方
それでは、具体的な書き方を詳しく見ていきましょう。
基本構文
配列.forEach(function(要素の中身, インデックス, 元の配列) {
// 実行したい処理
});
実は、forEach には3つのデータが渡されています。
- 要素の中身:今処理している「中身」そのもの(必須)
- インデックス:今、何番目か(任意)
- 元の配列:操作している配列全体(任意)
実際の例(インデックスも使う場合)
const users = ["田中", "佐藤", "鈴木"];
users.forEach(function(user, index) {
console.log(`${index + 1}番目のユーザーは、${user}さんです`);
});
このように、index を使えば「今、何番目のデータを処理しているか」も簡単に把握できます。
アロー関数で書くともっと簡単!
現代のJavaScript開発では、function という文字すら省略して書くのが主流です。ここで、アロー関数が出番になります。
アロー関数について知りたい方は、「JavaScriptのアロー関数とは?functionとの違いを初心者向けに解説」がオススメです。
アロー関数版のforEach
const scores = [80, 90, 70];
scores.forEach(score => console.log(score));
なんと、たったの1行で書けてしまいます。
- function を消す
- 引数のカッコを (score) => にする
- 処理が1行なら { } も消せる
この書き方は実務で100%登場するので、ぜひ今のうちに慣れておきましょう。
forEachを使う際の「3つの注意点」
非常に便利な forEach ですが、万能ではありません。初心者が最もハマりやすい「3つの罠」を解説します。
returnしても値は返らない
forEach の最大の特徴は、「やりっぱなし」だということです。
関数の外に結果を返そうとしてreturn を書いても、forEach 自体の結果は常にundefined(中身なし)になります。
breakやcontinueは使えない
for文では「特定の条件でループを抜ける(break)」ことができましたが、forEach は途中で止めることができません。
一度始めたら、配列の最後まで強制的に走り抜けます。「特定のデータが見つかったら終了したい」という場合は、for…of や some メソッドを使うのが正解です。
値を加工して「新しい配列」を作りたいならmapを使う
「配列の数字をすべて2倍にした新しい配列が欲しい」というとき、forEach で無理やり作ることもできますが、コードが汚くなりがちです。
そのような「加工」には、map というメソッドを使うのがベストです。
forEachとfor文の使い分け
結局、どっちを使えばいいのでしょうか?判断基準はシンプルです。
forEachを使うべき場面
- 配列の全データを順番に処理したい(画面に表示する、合計を出すなど)
- コードを短く、読みやすく保ちたい
- 途中で処理を止める必要がない
for文(またはfor…of)を使うべき場面
- 途中で break して処理を中断したい
- 配列以外の繰り返し(「1から100まで足す)などをしたい
- 処理速度を極限まで追求したい(非常に膨大なデータの場合)
まとめ
forEach は、JavaScriptで配列を扱う上で「最も親しみやすく、かつ強力な武器」です。
- forEachは「配列の全要素」を自動でループしてくれる。
- for文よりも記述が少なく、バグが起きにくい。
- アロー関数と組み合わせることで、1行でスッキリ記述できる。
- 「途中で止められない」「値を返さない」という特性を理解して使う。
まずは、配列で作った自分のデータを使って、forEach で1つずつコンソールに表示する練習をしてみてください。
「回数を数える苦労」から解放されたとき、あなたのJavaScriptスキルはまた一段、モダンな開発者へと近づきます!
