記事内にはプロモーションが含まれています

【JavaScript】map関数の使い方は?配列処理の基本から応用まで

【JavaScript】map関数の使い方は?配列処理の基本から応用まで JavaScript

JavaScriptで配列データを扱う際、頻繁に利用されるのが map() 関数(メソッド)です。

「配列の中身を全部2倍にしたい」「ユーザーリストから名前だけを取り出したい」といった、データの加工や抽出を行う場面で非常に強力な武器になります。

特にReactやVue.jsといったモダンなフロントエンド開発では、画面描画のループ処理において for 文よりも map が標準的に使われています。

しかし、初心者の方にとっては「forEach と何が違うの?」「引数の書き方がよく分からない」と迷うポイントでもあります。

この記事では、JavaScriptの map 関数の基本的な使い方から、実務でよく使う連想配列(オブジェクトの配列)での活用法、そして名前が似ている Map オブジェクトとの違いまで、スタンダードな書き方を交えて徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

map関数とは?配列の要素を加工して新しい配列を作る

map 関数は、配列のすべての要素に対して同じ処理を行い、その結果を新しい配列として返すメソッドです。

「元の配列を変更せず(非破壊的)、新しい配列を作る」という点が最大の特徴です。

基本的な書き方と構文

基本的には、配列に対して .map() を繋げ、その中に「コールバック関数(行わせたい処理)」を記述します。

const newArray = array.map((element) => {
  // ここに加工処理を書く
  return 加工後の値;
});

サンプルコード:数値を2倍にする

最もシンプルな例として、数値が入った配列の各要素を2倍にしてみましょう。

const numbers = [1, 2, 3, 4, 5];

// mapを使って各要素を2倍にする
const doubled = numbers.map((num) => {
  return num * 2;
});

console.log(doubled);
console.log(numbers);

実行結果

[2, 4, 6, 8, 10]
[1, 2, 3, 4, 5]

ソースコードの解説

  • numbers.map(...)numbers 配列の要素を一つずつ取り出して処理を開始します。
  • (num):取り出された要素が引数 num に入ります(1, 2, 3…と順番に渡されます)。
  • return num * 2:要素を2倍にした値を返します。この戻り値が新しい配列の要素になります。
  • 結果doubled には新しい配列 [2, 4, 6, 8, 10] が入り、元の numbers は変更されずに残っています。

map関数の引数:要素、インデックス、元配列の受け取り方

map 関数のコールバック関数には、実は最大で3つの引数を指定することができます。

普段は第1引数(要素)しか使いませんが、インデックス番号が必要な場合などに役立ちます。

3つの引数の役割

  1. 第1引数(必須):現在処理している要素の値(currentValue)。
  2. 第2引数(任意):現在処理している要素のインデックス番号(index)。
  3. 第3引数(任意)map を呼び出している元の配列そのもの(array)。

サンプルコード:インデックスを使った処理

順番(インデックス)を使って、「◯番目の要素は〜」という文字列を作ってみましょう。

const fruits = ["Apple", "Banana", "Orange"];

const messages = fruits.map((fruit, index) => {
  // インデックスは0から始まるため、+1 して表示
  return `${index + 1}番目のフルーツは${fruit}です`;
});

console.log(messages);

実行結果

[
  "1番目のフルーツはAppleです",
  "2番目のフルーツはBananaです",
  "3番目のフルーツはOrangeです"
]

ソースコードの解説

  • (fruit, index):第1引数で要素(Appleなど)、第2引数でインデックス(0, 1, 2)を受け取っています。
  • テンプレートリテラル`${...}` を使い、変数と文字列を結合しています。
  • このように、データの値だけでなく「順番」に意味がある処理を行う際に便利です。

forEachとの決定的な違いは「戻り値」の有無

map とよく比較されるのが forEach です。

どちらも配列をループ処理しますが、その目的と動作には明確な違いがあります。

違いのまとめ

特徴 map forEach
戻り値 新しい配列 undefined(なし)
目的 データを加工・変換したい時 単に繰り返し処理を行いたい時
元の配列 変更しない(非破壊) 変更しない(処理内容による)

サンプルコードでの比較

forEach は値を返さないため、結果を変数に入れても undefined になってしまいます。

const numbers = [1, 2, 3];

// mapの場合
const mapResult = numbers.map(num => num * 2);
console.log(mapResult); // [2, 4, 6]

// forEachの場合
const forEachResult = numbers.forEach(num => num * 2);
console.log(forEachResult); // undefined

使い分けのポイント

  • map:加工した結果を別の配列として保持したい場合。
  • forEach:ログ出力や、データベースへの保存など、値を返す必要がない場合。

実践!連想配列(オブジェクトの配列)から特定の値を抽出する

実務で map が最も活躍するのは、APIなどから取得した「オブジェクトの配列(連想配列のリスト)」を扱う場面です。

複雑なデータ構造から、必要なプロパティ(IDや名前など)だけを抜き出してリスト化する際によく使われます。

ユーザーリストからIDだけを抜き出す

以下のようなユーザー情報のリストから、IDだけの配列を作ってみましょう。

const users = [
  { id: 1, name: "Tanaka", role: "Admin" },
  { id: 2, name: "Suzuki", role: "User" },
  { id: 3, name: "Sato", role: "Guest" }
];

// 各オブジェクトから id プロパティだけを返す
const userIds = users.map((user) => user.id);

console.log(userIds);

実行結果

[1, 2, 3]

ソースコードの解説

  • users.map((user) => user.id):
    • 配列 users の中身はオブジェクト { id: 1, … } です。
    • これが引数 user に渡されます。
    • user.id とすることで、オブジェクト内の id の値だけを取り出して返しています。
  • このテクニックは、セレクトボックスの選択肢を作ったり、APIにIDリストを送ったりする際に非常に頻繁に使用します。

アロー関数を使った省略記法(モダンな書き方)

ES6(ES2015)以降、JavaScriptではアロー関数 => を使うのが一般的です。

特に map の処理が1行で終わる場合、return{ } を省略して非常にシンプルに書くことができます。

省略記法の例

const numbers = [10, 20, 30];

// 従来の書き方(無名関数)
const result1 = numbers.map(function(num) {
  return num * 2;
});

// アロー関数(returnあり)
const result2 = numbers.map((num) => {
  return num * 2;
});

// アロー関数(省略記法)★推奨
const result3 = numbers.map(num => num * 2);

console.log(result3); // [20, 40, 60]

ただ、処理が複数行になる場合や、オブジェクトそのものを返す場合(({ id: 1 }) のようにカッコが必要)は、省略記法が使えない、または書き方に注意が必要です。

まずは基本の形を覚えておき、慣れてきたら省略記法を使うと良いでしょう。

注意!「Mapオブジェクト」と「mapメソッド」は別物

JavaScriptを学習していると、「Map」という用語が2回出てきて混乱することがあります。

今回解説しているのは Array.prototype.map() という配列のメソッドですが、これとは別に Map という組み込みオブジェクトが存在します。

Mapオブジェクトとは?

Map オブジェクトは、キーと値のペアを保持するためのコレクション(データ構造)です。

連想配列(オブジェクト)と似ていますが、キーに文字列以外(数値やオブジェクトなど)も使える点が異なります。

// これは Map オブジェクト(配列のmapメソッドとは無関係)
const myMap = new Map();
myMap.set('key1', 'value1');
console.log(myMap.get('key1'));

「配列のmap」「Mapオブジェクト」 は全く用途が異なるため、検索や学習の際は混同しないように注意しましょう。

JavaScriptのスキルを活かして年収を上げる方法

以上、JavaScriptのmap関数の使い方について解説してきました。

なお、JavaScriptのスキルがある場合には、「副業で稼いで年収を上げる」といったことが可能です。

JavaScriptのスキルを持つ人は多いものの、その分案件数も多く、副業エージェントやフリーランスエージェントを利用することで予想外の高単価案件が見つかることもあります。

エージェントサービスは、登録も利用もすべて完全無料なので、どんな求人や案件があるのか気になる方は、気軽に利用してみるとよいでしょう。