配列メソッド — *関数型スタイルの核心*
配列メソッド — *関数型スタイルの核心*
🎯 このレッスンを読んだ後にできること
このレッスンを読み終えると、次の3つを自信を持ってできるようになります。
- ▸✅ map · filter · reduce · find · some · every のチェーン
- ▸✅ sort が元の配列を変更すること — 不変にするには toSorted (ES2023) を使用
- ▸✅ flat · flatMap · Array.from の活用
学習目標をチェックリストとして持ち、すべてに答えられるようになったらレッスンを閉じてください。
必須の5つのメソッド
要約
JS配列の関数型メソッド — map・filter・reduce・find・some/every — を覚えるだけで、ループの90%がなくなります。関数型思考の出発点。
map — 各要素を変換
昔のコード: for ループ + push。モダン: .map() 一行。
filter — 条件を満たすものだけ残す
reduce — 一つに集約する
reduce は map や filter も再現できる最も強力なメソッドです。最初はわかりにくいですが、慣れると強力です。
find — 最初のマッチ
filter はすべてのマッチ、find は最初の一つだけを返します。
some / every — 真偽チェック
if (array.find(...)) より if (array.some(...)) の方が意図が明確です。
チェーン — 組み合わせる
filter → map → reduce のパターンは、SQL の WHERE → SELECT → SUM と同じです。意図が一直線に読めます。
よく使う追加メソッド
よくあるトラップ
1. 元の配列を変更する vs 新しい配列を返す:
- ▸
sort・reverse・push・pop・splice— 元の配列を変更 ⚠️ - ▸
map・filter・slice・concat— 新しい配列を返す ✅
2. forEach vs map:
forEach は副作用専用、map は新しい配列を作るためのもの。目的に応じて使い分けましょう。
まとめ
- ▸
map・filter・reduce= 関数型の三銃士 - ▸チェーンで組み合わせる
- ▸元の配列の変更 vs 新しい配列の区別は必須
- ▸
forループを書く機会はほぼなくなる
find · some · every · flatMap — さらに5つのメソッド
find — 最初のマッチだけ
filter とは違い、最初のマッチですぐに終了します。単一レコード検索の標準。
findIndex — 位置のインデックスのみ
some / every — boolean を返す
入力バリデーションや権限チェックによく使われます:
flat / flatMap — ネストを平坦化
Array.from — 配列ライク・イテラブル → 配列
チェーンパターン — *バイブコーディングの定番表現*
変換・フィルタ・集計を一度に
for ループ10行 → 4行のチェーン。AIが生成するコードのほぼ標準パターン。
ソートしてから上位N件
注意: sort() は元の配列を変更します。イミュータブルにしたい場合は [...users].sort(...) または users.toSorted(...) (ES2023) を使いましょう。
グループ化 + 変換
ES2024 では Object.groupBy(orders, o => o.status) の一行で完結します。
よくあるトラップ
1. reduce の初期値を忘れる
空の配列に初期値がないとエラーになります。常に初期値を明示しましょう。
2. map の中で副作用を起こす
map は新しい配列を作ることが目的です。結果を使わないなら forEach が正解です。
🤖 AIにこう依頼してみよう
- ▸「この for ループを filter/map/reduce チェーンに変えて」
- ▸「このコードで orders の中から status='paid' のものだけ amount を合算して出力して」
- ▸「この sort の呼び出しが元の配列を変更しないよう toSorted に書き換えて」