JavaScriptのmapメソッドの使い方について、書いています。
配列からmapメソッドを呼び出すことで、ひとつずつ要素を取り出して、新しい配列を作成します。
前回はforEachについて、こちらに記事を書きました。
forEachと同じようなメソッドですが、mapとの違いについても見ていきます。
MDNのページにも詳しく書いてあるので、おすすめです。
MDN: Array.prototype.map()
mapの使い方は?
mapメソッドもforEachメソッドと同じで、配列の要素を取り出してループ処理します。
forEachとの違いは、mapメソッドでは、新しい配列を作成して返してくれるところです。
mapメソッドは配列から、下記のように使用することができます。
const fruits = ['apple', 'orange', 'banana'];
const newFruits = fruits.map((data, index) => {
return data + '123'
});
console.log(newFruits);
fruits
配列を作成した後に、配列からmap
メソッドを呼び出しています。
map
メソッドの第1引数に配列の要素がひとつずつ入ってきます。
第2引数は使用していませんが、配列のインデックス番号が入ってきます。
第1引数は必須で、第2引数は省略可能です。
map
メソッドの関数では、配列の要素と123
を連結して返しています。
newFruits
には新しくmap
で作成された配列が入ります。
結果として、コンソールには下記のように配列のそれぞれの要素に123
が連結された内容が出力されます。
(3) ['apple123', 'orange123', 'banana123']
map
メソッドはこのように新しく配列を作成するときに使用します。
第3引数を指定する
第3引数を指定すると、配列自身が入ります。
例えば下記のように指定して、処理してみます。
const fruits = ['apple', 'orange', 'banana'];
const newFruits = fruits.map((data, index, myArray) => {
console.log(data, index, myArray)
});
配列のfruits
をループして、それぞれの引数を出力してみました。
このように処理すると、下記のように出力されます。
apple 0 (3) ['apple', 'orange', 'banana']
orange 1 (3) ['apple', 'orange', 'banana']
banana 2 (3) ['apple', 'orange', 'banana']
配列の値と、配列のインデックス番号と、配列自身が取れていることが確認できます。
まとめ
map
メソッドの使用方法を文字でまとめると、下記のようになります。
const [配列を受ける変数] = [配列].map(([配列の要素],[配列のインデックス番号 - 省略可], [配列自身 - 省略可]) => {
// 新しく作る配列の要素を定義する
})
第2引数と第3引数は省略可能です。
処理には作成する配列を定義して、新しく作成された配列を変数で受け取って使用します。
mapとforEachの違いは?
map
メソッドの動きや、渡す引数を確認するとforEach
メソッドとほとんど同じです。
違いはmap
メソッドでは、配列を作成してくれるところになります。
map
メソッドを使用する場合は、何か配列を作成するなどに使います。
単純にループ処理のみで、コールバック関数で値を返さずに配列を作成しない場合は、forEach
メソッドの使い所となります。
mapを使ってみる
map
メソッドを実際に使って、簡単な処理を書いてみました。
mapTest.html
という名前で下記を保存します。
<html>
<head>
<meta charset="UTF-8" />
<title>mapTestのテスト</title>
<script>
function mapTest() {
const numbers = [1, 2, 3];
const bigNumbers = numbers.map((data) => {
return data * 100;
});
bigNumbers.forEach((data) => {
document.querySelector('#result').innerHTML += data + '<br />';
});
}
</script>
</head>
<body>
<button onclick="mapTest()">mapTestのテスト</button>
<div id="result"></div>
</body>
</html>
ボタンをひとつ用意して、押すとmapTest
関数が動くようにしました。
数字の配列を作成して、1, 2, 3
を入れました。
map
メソッドを使用して、数字の配列をループさせて、100を掛けて返すようにしました。
結果をbigNumbers
配列に入れました。(それぞれの値が100倍された内容が入る)
最後にbigNumbers
をforEach
メソッドでループさせて、HTMLのdiv
タグに出力しています。
結果としてボタンを押すと、それぞれの値が100倍された内容が出力される想定です。
動作確認
実際に画面を開いて、動作を確認してみます。
開いてボタンを押すと、下記のように出力されたことが確認できました。
コメント