JavaScriptの学習を進めていく上では必ず出てくるmap関数。
しかしぶっちゃけ仕組みとかよくわからんという方もいるのではないでしょうか。
今回はそんなmap関数について、forEachなどとの違いもあわせて解説していきます。
おねしゃす
map関数とは?
map関数は、JavaScriptの配列メソッドの一つで、元の配列の各要素に対して指定した関数を適用し、その結果を新しい配列として返します。元の配列は変更されません。
map関数の基本形
map関数の基本的な構文は以下の通りです。
array.map(function(element, index, array) {
// 新しい配列の要素となる値を返す
});
各パラメータの説明は以下のような感じです。
element
: 配列の現在の要素index
: 現在の要素のインデックスarray
:map
が呼び出された元の配列
map関数を使ったサンプルコード
以下にmap関数を使った実際の処理に近いサンプルを書いてみます。
こんな感じでmap関数は使われています。
例1: 配列の各要素を2倍にする
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(function(num) {
return num * 2;
});
console.log(doubled); // [2, 4, 6, 8]
例2: オブジェクトのプロパティを操作する
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 35 }
];
const userNames = users.map(function(user) {
return user.name;
});
console.log(userNames); // ['Alice', 'Bob', 'Charlie']
例3: アロー関数を使ったシンプルな例
const numbers = [1, 2, 3, 4];
const squared = numbers.map(num => num * num);
console.log(squared); // [1, 4, 9, 16]
map関数を使う際の注意点
map関数を使用する際に注意しておくべきこと、覚えておくべきことがあります。
map関数は常に新しい配列を返す
map
関数はもとの配列を変更せずに、常に新しい配列を返します。この点がforEachなど他のループと異なる点です。
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8]
console.log(numbers); // [1, 2, 3, 4]
map関数は同じ長さの新しい配列を返す
map
関数は元の配列と同じ長さの新しい配列を返します。
関数がundefined
を返しても、その位置にはundefined
が入ります。
const numbers = [1, 2, 3, 4];
const undefinedArray = numbers.map(() => {});
console.log(undefinedArray); // [undefined, undefined, undefined, undefined]
上記の例では、map
関数内のコールバックが何も返さないため、新しい配列にはundefined
が入りますが、長さは元の配列と同じです。
要素の削除やスキップはできない
map
関数は、全ての要素に対してコールバック関数を実行します。要素を削除したりスキップしたりすることはできません。これが、filter
関数やforEach
関数と異なる点です。
const numbers = [1, 2, 3, 4];
const noChange = numbers.map(num => {
if (num > 2) return num;
});
console.log(noChange); // [undefined, undefined, 3, 4]
forEachと何が違うの?
map
関数と似たメソッドにforEach
がありますが、
forEach
は、各要素に対してコールバック関数を実行しますが、新しい配列を返しません。
処理結果を保持したい場合は、手動で配列を作成する必要があります。
const numbers = [1, 2, 3, 4];
const doubled = [];
numbers.forEach(num => {
doubled.push(num * 2);
});
console.log(doubled); // [2, 4, 6, 8]
mapとforEachの比較
const numbers = [1, 2, 3, 4];
// mapを使った場合
const doubledWithMap = numbers.map(function(num) {
return num * 2;
});
console.log(doubledWithMap); // [2, 4, 6, 8]
// forEachを使った場合
const doubledWithForEach = [];
numbers.forEach(function(num) {
doubledWithForEach.push(num * 2);
});
console.log(doubledWithForEach); // [2, 4, 6, 8]
map
は新しい配列を直接返すためシンプルに書けますが、forEach
を使う場合は新しい配列に要素を手動で追加する必要があります。
以上がJavaScriptのmap
関数の基本的な使い方と注意点です。適切に使い分けることで、効率的なコードを書くことができます。
なるほどなぁ