mapの復習

配列を、同じ件数の別の配列に変える

map は、配列の要素を 1 つずつ受け取って、それぞれを何かに変換し、変換後の値を集めた新しい配列を返すメソッドです。

const titles = ["レシピ検索アプリ", "買い物メモツール", "写真ギャラリー"]; const lengths = titles.map((title) => title.length); lengths; // [8, 8, 7] titles; // もとの配列はそのまま

覚えることは 2 つだけです。件数は必ず同じになることと、もとの配列は変わらないことです。件数を減らしたいときは map ではなく filter を使います。

渡している (title) => title.length が、前のレッスンで復習したアロー関数です。map は「変換のしかたを書いた関数」を引数として受け取ります。

オブジェクトの配列を扱う

実際のデータはオブジェクトの配列であることがほとんどです。分割代入と組み合わせると読みやすくなります。

const works = [ { id: 1, title: "レシピ検索アプリ", year: 2025 }, { id: 2, title: "買い物メモツール", year: 2025 }, ]; const labels = works.map(({ title, year }) => title + "(" + year + ")"); labels; // ["レシピ検索アプリ(2025)", "買い物メモツール(2025)"]

引数のところにそのまま波かっこを書けば、受け取った 1 件から必要なプロパティだけを取り出せます。

なぜ React でこれが要るのか

第6章のリスト描画が、この map そのものだからです。React には「配列をくり返し表示する専用の書き方」がありません。JSX の中で map を呼び、要素の配列を作って埋め込みます。

<ul> {works.map((work) => ( <li key={work.id}>{work.title}</li> ))} </ul>

やっていることは、さきほどの labels を作ったのと同じです。違うのは、変換後の値が文字列ではなく JSX の要素だという点だけです。作品が 3 件なら li が 3 個並びます。

key={work.id} にも触れておきます。React は、並んでいる要素のどれがどれなのかを key で見分けます。だから map に渡すデータには、id のように 1 件ずつ違う値が必要です。第6章で詳しく扱いますが、map するデータには id を持たせておく、と今のうちに意識しておいてください。

つまずきどころ

波かっこを書いて return を忘れると、中身が全部 undefined の配列ができます。

const labels = works.map((work) => { work.title + "(" + work.year + ")"; }); labels; // [undefined, undefined]

件数は合っているのに中身が空、という症状が出たらここを疑います。

演習

作品の配列を、画面にそのまま出せるラベルの配列に変換します。

要件

  1. map を使って新しい配列を作る
  2. 1 件を タイトル(西暦) の形の文字列にする。かっこは全角の( と )を使う
  3. もとの配列は書き換えず、件数もそのままにする

入出力例

toWorkLabels([{"category":"web","id":1,"published":true,"title":"レシピ検索アプリ","year":2025},{"category":"tool","id":2,"published":true,"title":"買い物メモツール","year":2025},{"category":"web","id":3,"published":false,"title":"写真ギャラリー","year":2026}])["レシピ検索アプリ(2025)","買い物メモツール(2025)","写真ギャラリー(2026)"] toWorkLabels([{"category":"web","id":1,"published":true,"title":"レシピ検索アプリ","year":2025}])["レシピ検索アプリ(2025)"] toWorkLabels([])[] toWorkLabels([{"category":"web","id":3,"published":false,"title":"写真ギャラリー","year":2026},{"category":"tool","id":4,"published":false,"title":"読書メモアプリ","year":2026}])["写真ギャラリー(2026)","読書メモアプリ(2026)"]

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.js
main.js
学習モード

メモ

mapの復習

⌘S で保存