Kodokon kodokon.com

配列メソッド: map, filter, reduce, find

実際のプロジェクトで最もよく使われる4つの配列メソッドを使って、データを変換・絞り込み・集計する方法を学びます。

10 分 · 3 問

このレッスンを Kodokon で開く

実際のプロジェクトでは、データを変換することに時間を費やします。表示する商品のリスト、並べ替えるAPIの結果、合計を出すカートなど。mapfilterreducefind メソッドは、あなたの for ループのほとんどを、より短く表現力豊かなコードに置き換えます。これらは元の配列を決して変更しません。新しい結果を返すので、あるクラス全体のバグを防げます。

JAVASCRIPT
const products = [
  { name: "keyboard", price: 49, inStock: true },
  { name: "mouse", price: 25, inStock: false },
  { name: "screen", price: 199, inStock: true }
];

const names = products.map((product) => product.name);
console.log(names); // ["keyboard", "mouse", "screen"]
map は各要素を変換し、同じ長さの新しい配列を返します。

filter はテストを通過した要素だけを残し、空になる可能性もある新しい配列を返します。find最初に一致した要素で止まり、要素そのものを返します。何も一致しなければ undefined を返します。頭の体操: 在庫のある商品をすべて取得するには、どちらを選びますか? そして"mouse"という名前の商品を1つ取得するには?

JAVASCRIPT
const available = products.filter((p) => p.inStock);
console.log(available.length); // 2

const mouse = products.find((p) => p.name === "mouse");
console.log(mouse.price); // 25
filter は配列を返し、find は単一の要素を返します。

reduce は最も強力です。配列を単一の値(数値、オブジェクト、文字列)に還元します。アキュムレータと現在の要素を受け取る関数に加えて、初期値を取ります。典型的なユースケース: カートの合計を計算することです。

JAVASCRIPT
const cart = [
  { label: "T-shirt", quantity: 2, unitPrice: 15 },
  { label: "Cap", quantity: 1, unitPrice: 12 }
];

const total = cart.reduce(
  (sum, item) => sum + item.quantity * item.unitPrice,
  0
);
console.log(total); // 42
sum アキュムレータは、第2引数として渡された初期値である 0 から始まります。

適切なメソッドを選ぶには、自分に1つ質問してください。結果はどんな形であるべきか? 元と同じ数の要素だが変換されたもの: map。部分集合: filter。単一の要素: find。計算された単一の値: reduce。この反射的な判断は、面接でもプロジェクトでも貴重な時間を節約してくれます。

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. 元の配列と常に同じ長さの配列を返すメソッドはどれですか?
    • filter
    • map
    • reduce
    • find
  2. どの要素も条件を満たさない場合、find は何を返しますか?
    • null
    • undefined
    • 空の配列
    • エラーがスローされる
  3. cart.reduce((sum, item) => sum + item.unitPrice, 0) の中で、最後の 0 は何のためのものですか?
    • sum アキュムレータの初期値です
    • 走査の開始インデックスです
    • 配列が無効な場合に返される値です