1. 作品 3 件を改行でつなぐ
  2. 空文字列は飛ばして連番を詰める
  3. 作品が 1 件だけ
  4. 空配列のとき
  5. 空文字列しか無いとき
コース一覧
JavaScript基礎文法:処理を組み立てる
forEach で配列をまわす

JavaScript基礎文法:処理を組み立てる

if・switch による条件分岐、配列とループ、関数とコールバック、オブジェクトを順に組み立てる全 33 レッスン(525 分)の基礎文法コースです。FizzBuzz、作品リスト、関数への整理、作品データの構造化を通して、入力から結果を返す処理を自分で分解して書きます。DOM 操作は次のコースで扱います。

1
条件分岐
01. if 文の基本15分
02. if / else if / else で段階判定15分
03. switch 文で値を一覧から選ぶ15分
04. 条件を組み合わせる20分
05. FizzBuzz で複数条件を組み立てる20分
06. つくる 時間帯で挨拶を変える20分
07. 第1章まとめクイズ10分
2
配列とループ
01. 配列のきほん15分
02. 要素を足す・取り除く15分
03. for ループで合計を求める15分
04. for-of で配列を走査する15分
05. while で条件を満たす間くり返す15分
06. break と continue でループを制御する15分
07. つくる 作品リストを一覧にする20分
08. 第2章まとめクイズ10分
3
関数
01. 関数宣言15分
02. アロー関数15分
03. デフォルト引数15分
04. 早期 return でネストを浅くする15分
05. 変数のスコープ15分
06. コールバック関数15分
07. forEach で配列をまわす15分
08. つくる 処理を関数に整理する20分
09. 第3章まとめクイズ10分
4
オブジェクト
01. オブジェクトのきほん18分
02. オブジェクトで複数の値を返す16分
03. const と参照18分
04. ?. で安全に取り出す16分
05. 分割代入18分
06. スプレッド構文18分
07. find と includes で探す16分
08. つくる 作品データを構造化する25分
09. 第4章まとめクイズ10分

forEach で配列をまわす

forEach は途中で止められない
解説

このレッスンで分かること

  • 配列.forEach((要素) => { 処理 }) で、配列が自分をまわしてくれます
  • forEach は途中で break できません

ループの決まり文句を、毎回書いている

for (let i = 0; i < works.length; i++) は、やりたいことに比べて長すぎます。しかも初期値、条件の不等号、更新式と、間違えられる場所が 3 つもあります。配列を全部まわすだけなら、その決まり文句は配列に任せられます。

JavaScript

const works = ["プロフィールサイト", "自己紹介カード", "スキル一覧の表"]; // for-of for (const work of works) { console.log(work); } // forEach works.forEach((work) => { console.log(work); });

結果は同じです。forEach は配列が持っているメソッドで、コールバックを 1 つ受け取ります。先頭から順に要素を取り出し、その要素を引数にしてコールバックを呼んでくれます。ループの仕組みは forEach の側にあるので、こちらは各要素に何をするかだけを書きます。

インデックスが要るときは、第 2 引数で受け取れます。

JavaScript

works.forEach((work, index) => { console.log(index + " 番目 " + work); }); // 0 番目 プロフィールサイト // 1 番目 自己紹介カード // 2 番目 スキル一覧の表

要らなければ書かなくて構いません。空の配列に呼んでもエラーにはならず、コールバックが一度も呼ばれずに終わります。要素数 0 のための if は要りません。

戻り値はいつでも undefined

forEach 自体が返すのは、いつでも undefined です。

JavaScript

const result = works.forEach((work) => work + " 完成"); console.log(result); // undefined

forEach は各要素に何かするための道具であって、変換した新しい配列を作る道具ではありません。結果を集めたいなら、外側に空の配列を用意して push していきます。集め終わった配列は、配列.join("、") のように区切り文字を渡せば 1 本の文字列になります。区切りは要素と要素のあいだにだけ入るので、末尾に余分が残る心配もありません。

break が書けない

for-of との最大の違いがこれです。forEach の中に break を書くと構文エラーになります。

やりたいことfor-offorEach
途中で打ち切るbreak書けない
その要素だけ飛ばすcontinuereturn で代用
インデックスを使う自分で数える第 2 引数

渡しているのは関数なので、その中の break はループを抜ける文として成立しません。ループを止めているのは forEach の側であり、コールバックからは手が届かないのです。途中で打ち切りたくなったら、for-of に書き換えます。

一方、その要素だけ飛ばしたいなら return が使えます。コールバックが終わるだけで、次の要素の処理は続きます。

JavaScript

works.forEach((work) => { if (work === "下書きメモ") return; // この要素だけ飛ばす console.log(work); });

この return は continue に相当します。break の代わりにはならない、という点だけ取り違えないでください。

よくある間違い

  • 戻り値を受け取ろうとする — const titles = works.forEach(...) の titles は必ず undefined です。集めたい値は、外に用意した配列へ push します
  • 丸カッコを付けて渡す — works.forEach(show()) はその場で 1 回だけ実行され、その戻り値が渡ります。渡すのは show です

要件

  1. 配列の走査には forEach を使うこと
  2. 行を集める配列は関数の中で宣言すること
  3. 空文字列の要素は飛ばし、連番は実際に追加した行数どおりに振ること
  4. 表示できる作品が 0 件のときは文字列 作品はまだありません を返すこと

入出力例

listWorks(["プロフィールサイト","自己紹介カード","スキル一覧の表"]) → "1. プロフィールサイト 2. 自己紹介カード 3. スキル一覧の表" listWorks(["プロフィールサイト","","スキル一覧の表"]) → "1. プロフィールサイト 2. スキル一覧の表" listWorks(["自己紹介カード"]) → "1. 自己紹介カード" listWorks([]) → "作品はまだありません" listWorks(["",""]) → "作品はまだありません"

ヒント

空の配列を用意し、forEach の中で push して、最後に join でつなぐのが定番の型です

`works.forEach((work) => { ... })` の中で `if (work === "") return;` と書くと、その要素だけ飛ばせます

連番を詰めたいので、index ではなく lines.length + 1 を番号に使ってください

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • つくる 処理を関数に整理する

    第6章で学んだ関数の書き方を総動員して、プロフィールページの文字列を組み立てます。挨拶と作品一覧を別々の関数に分けるのがポイントです。

  • 第3章まとめクイズ

    第6章で学んだ関数宣言とアロー関数、デフォルト引数、ガード節、スコープ、コールバックと forEach を 5 問で確認します。

  • オブジェクトのきほん

    関連する値をひとつの箱にまとめる入れ物がオブジェクトです。作成とプロパティの読み書きを身に付けます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 配列サイズ固定の同型データの集まり
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • メソッドクラスに属する関数
  • コールバック子から親へ通知するための関数 props
  • 引数位置引数=順番で渡す。
  • インデックスDB 検索を速くする索引
  • 素数1 と自分自身でしか割り切れない自然数
  • 戻り値呼び出し元への返答を表す点線矢印
main.js
学習モード
エディタを読み込んでいます

メモ

forEach で配列をまわす

⌘S で保存