map メソッドの使い方を知りたい。。。
JavaScript では配列の処理を行うメソッドとして、map()
が頻繁に使用されています。
このmap
メソッドは与えられた関数を配列データの全要素に対して実行し、その結果を新しい配列を生成することができます。
この記事では、配列のmap
メソッドについて利用方法やポイント、使用例を紹介しています。これからmap
メソッドを利用する方におススメの記事です。
オススメの書籍
初心者向けのやさしい解説が特徴で、JavaScriptの書き方や使い方、アニメーションやイベントの知識などを学べる1冊です。1章から8章まであり、プログラミングの基本から実装方法までをカバーしています。Webサイトからはサンプルデータがダウンロードできます。JavaScriptを学びたい初心者から、最新の技術を学びたい人などにオススメです。
mapメソッドについて
JavaScript の配列を扱うArray
オブジェクトには開発する上で欠かせないメソッドが標準で用意されています。map
メソッドはその中の1つです。
map
メソッドを利用することで、配列の全ての要素を1つずつ取り出してcallback
関数を実行し、処理した結果を新しい配列として返します。
このメソッドを利用する、基本的な書き方は次の通りです。
配列.map( function (value) {
//配列の要素に対して処理を行う
});
map
によって配列の要素がvalue
に格納され、そのvalueを利用してcallback
関数内で処理が実行されます。
callback
関数は、いくつかの引数を受け取ることが可能です。例えば引数が3つの場合は次のように使用します。
配列.map(function (value, index, thisArray){
//配列の要素に対して処理を行う
});
value
に配列から取り出した要素、index
に取り出した要素のインデックス番号、thisArray
が現在処理している配列となります。
mapメソッドのポイント
map
メソッドの特徴は次の通りです。
- mapメソッドはJavaScriptの配列データに対して扱えるメソッド
- 配列の先頭から最後までの要素、1つ1つに処理を加える
- 処理した結果を新しい配列にして返してくれる(返り値がある)
map
メソッドに近い処理を行うメソッドとして、forEach
メソッドがあります。forEach
メソッドは返り値がない一方で、map
メソッドは返り値があります。
この返り値があることで対象の配列はそのままにして、対象の配列の中から特定のオブジェクトを抜き出すことが可能です。
例えば、次のコードではオブジェクト名 students から name だけを取り出しています。
const students = [
{name : '田中', age : 24 },
{name : '佐藤', age : 19 },
{name : '原田', age : 20 },
{name : '有田', age : 21 },
{name : '木村', age : 25 }
];
const studentName = students.map(student => student.name);
console.log(studentName);
実行結果は次の通りです。
// ['田中', '佐藤', '原田', '有田', '木村']
対象の配列の中から特定のオブジェクトを抜き出すことができました。
このmap
メソッドの弱点として、配列の中で特定の条件に一致した要素のみを抜き出すことができない点です。
map
メソッドは元の配列と同じ要素数の配列を作成します。
特定の条件に一致する配列を作成するなら、Array
オブジェクトで用意されているfilter
メソッドやforEach
などを利用しましょう。
mapメソッドの使用例
ここからはmap
メソッドの使用例について紹介をします。
数値を倍に変換
map
メソッドを利用して配列内にある数値を倍に変換します。
const values = [1, 5, 13, 24, 30];
const multiple = values.map (value => value * 2);
console.log(multiple);
実行結果は次の通りです。
// [2, 10, 26, 48, 60]
Callback
関数の処理で要素に2を掛けることで倍に変換された新しい配列を作成することができます。
要素の文字の長さを取得
配列の中にある要素の長さを取得します。
const array = ['onion', 'carrot', 'potatp', 'meat', 'pumpkin'];
const arrayLength = array.map (value => value.length);
console.log(arrayLength);
実行結果は次の通りです。
// [5, 6, 6, 4, 7]
Callback
関数の処理でlength
プロパティを使って要素の文字の長さを取得します。取得した文字長さで新しい配列を作成します。
文字列を大文字に変換
配列の要素を大文字に変換します。
const array = ['onion', 'carrot', 'potatp', 'meat', 'pumpkin'];
const arrayUppercase = array.map (value => value.toUpperCase());
console.log(arrayUppercase);
実行結果は次の通りです。
// ['ONION', 'CARROT', 'POTATP', 'MEAT', 'PUMPKIN']
文字列を大文字に変換するには「toUpperCase
メソッド」を使用します。map
メソッドと組み合わせることで、配列の要素を全て大文字に変換して新しい配列を作成します。
文字列を小文字に変換
配列の要素を小文字に変換します。
const array = ['ONION', 'CARROT', 'POTATP', 'MEAT', 'PUMPKIN'];
const arrayLowercase = array.map (value => value.toLowerCase());
console.log(arrayLowercase);
実行結果は次の通りです。
// ['onion', 'carrot', 'potatp', 'meat', 'pumpkin']
文字列を小文字に変換するには「toLowerCase
メソッド」を使用します。map
メソッドと組み合わせることで、配列の要素を全て小文字に変換して新しい配列を作成します。
配列からオブジェクトの配列を作成
配列からオブジェクトに変換する例が次の通りです。
const array = ['onion', 'carrot', 'potatp', 'meat', 'pumpkin'];
const arrayObject = array.map (value => ({id, value}));
console.log(arrayObject);
実行結果は次の通りです。
// [{id,'onion'}, {id,'carrot'}, {id,'potatp'}, {id,'meat'}, {id,'pumpkin'}]
idと要素の組み合わせでオブジェクトを生成し、新しい配列を作成します。
ここで注意してほしいことが、オブジェクトを作成するには中括弧をさらに丸括弧で囲む必要があります。
アロー関数を使用しているので丸括弧の記述をしないと、Callback
関数の中括弧(引数)=>{ 処理 }
なのか曖昧になってしまいエラーとなってしまいます。
2つの配列を合体させたオブジェクトの配列を作成
異なる2つの配列の要素を合体させて、オブジェクトの配列を作成します。
const foods = ['gummy', 'crisps', 'chocolate', 'gum', 'senbei'];
const calories = [34, 139, 89, 43, 18];
const arrayObject = foods.map ((food, index) => ({
food : foods[index],
calorie : calories[index]
}));
console.log(arrayObject);
実行結果は次の通りです。
// [{food:'gummy', calories:34},
// {food:'carrot', calories:139},
// {food:'potatp', calories:89},
// {food:'meat', calories:43},
// {food:'pumpkin', calories:18}]
map
の第2引数は要素のインデックス番号になります。このインデックスを扱うことで、異なる2つの配列の要素を取り出して、オブジェクトが配列に格納されます。
元の配列をmapメソッドで変更
mapメソッドは上述している通り、基本的に新しい配列を作成します。
ただ引数を利用することで元の配列データを変更することが可能です。
const values = [0, 1, 2, 3, 4];
values.map ((value, index, array) => {
array[index] = value * 3
});
console.log(values);
実行結果は次の通りです。
// [0, 3, 6, 9, 12]
第3引数には元の配列データが渡されるので、array
に処理した結果を代入することで、元の配列データを変更することができます。
まとめ
この記事でArray
オブジェクトで用意されているmap
メソッドの使い方と使用例について紹介しました。
map
メソッドは配列の全ての要素に対して処理を行うことができ、元の配列を残しつつ新しい配列を作成することが可能です。
新しく作成された配列の要素を使用しない場合は、map
メソッドを使うケースに当てはまりませんので、filter
メソッドやforEach
メソッドを利用しましょう。
以上、最後まで読んでいただきありがとうございました。