【JavaScript】配列を操作するmapの使い方
JavaScriptで配列を操作する時に多用する便利なメソッド、mapについてまとめました。
mapとは、配列を元に新たな配列を生成する関数
mapは、配列を元に、新たな配列を生成するメソッドです。
引数で指定した関数を通じて、返却された値が配列の中身となります。
簡単な使用例として、mapを使用して、配列の中身をすべて倍にした配列を返す処理を書いてみました。
従来の書き方
var array = [1, 2, 3, 4, 5];
aryResult = array.map(function(value){
return value * 2; //returnされた値が新たな配列の中身になる
});
console.log(aryResult);アロー関数の書き方(最新)
var array = [1, 2, 3, 4, 5];
aryResult = array.map(value => {
return value * 2; //returnされた値が新たな配列の中身になる
});
console.log(aryResult);1行で終わるような簡略な処理の場合、returnは省略できます。
var array = [1, 2, 3, 4, 5]; aryResult = array.map(value => value * 2); console.log(aryResult);
既存の関数を指定してmapを実行
先ほどまでのサンプルコードは、map内で関数を書く、いわゆる「無名関数」の書き方でしたが、既存の関数を元にmapを実行することが出来ます。
function double(no){
return no * 2;
}
var array = [1, 2, 3, 4, 5];
aryResult = array.map(double);
console.log(aryResult);
mapとfor、forEachの違い
mapは配列を元に新たな配列を生成するメソッドであり、配列を繰り返すfor、forEachとは用途が全く違います。
for、forEachは配列を繰り返して中の値を取得する構文であり、mapのように新たな配列を返したりはしません。
var array = [1, 2, 3, 4, 5];
//for in文
for(key in array){
console.log('forin : ' + array[key]);
}
//forEach文
array.forEach(function(value){
console.log('forEach : ' + value);
});
まとめると、
- map : 配列を取得する
- for、forEach : 配列を繰り返して中の値を順に取得する
という違いがあるので、用途に応じて使い分けましょう。
mapでキー(index)を取得したい場合
map内の関数の処理で、配列のindexを使用したい場合は、第二引数を定義する必要があります。
下記は、配列の中身をすべてmapでキーに置き換えた処理です。
var array = [10, 100, 1000, 10000, 100000];
aryResult = array.map(function(value, index){
return index;
});
console.log(aryResult);
mapでreturnしなかった値はnullが返る
mapでreturnで返却しなかった値があった場合は、それはnullとして配列に含まれます。
var array = [10, 100, 1000, 10000, 100000];
aryResult = array.map(value => {
if(value >= 1000){
return value * 2;
}
});
console.log(aryResult);
mapは配列内すべての値に処理を施すメソッドなので、特定の値は省きたい、などの処理には向いていません。
特定の値を省くフィルタリングを行いたい場合は、filter()というメソッドがあるのでそれを使用しましょう。
var array = [10, 100, 1000, 10000, 100000];
aryResult = array.filter(value => {
if(value >= 1000){
return value * 2;
}
});
console.log(aryResult);
連想配列(Object)でmapを操作する
先ほどのサンプルコードで書いた、「一律で数値を倍にする」という処理は実際あまり行いません。
その代わり、mapは、オブジェクトが絡んだ配列(連想配列)で使用することが多いです。
apiで取得したjson形式のデータは、連想配列になっていることが多いですからね。
連想配列のプロパティをmapで抽出する
例えば、下記のようなシンプルな連想配列があったとします。
var array = [
{'no' : 0, 'name' : 'tanaka'},
{'no' : 1, 'name' : 'sato'},
{'no' : 2, 'name' : 'yamamoto'},
];
console.log(array);
この配列のnameの部分を、単一の配列として取得したい場合は、mapを使用することで一行で取得が出来ます。
var array = [
{'no' : 0, 'name' : 'tanaka'},
{'no' : 1, 'name' : 'sato'},
{'no' : 2, 'name' : 'yamamoto'},
];
aryResult = array.map(value => value['name']);
/*
//こういう風にも書けます
aryResult = array.map(value => {
return value['name'];
});
*/
console.log(aryResult);
mapで配列から連想配列を生成する
逆に、配列を元に連想配列を生成することも出来ます。
先ほどの名前のみの配列に、noというプロパティを付けた連想配列を生成してみます。
noはとりあえずindexを当てはめます。
var array = ['tanaka', 'sato', 'yamamoto'];
aryResult = array.map(function(value, key){
return {'no' : key, 'name' : value};
});
console.log(aryResult);
このように、mapを使用して、扱いやすい連想配列を生成することが出来ました。
mapはデータ処理にとても便利な関数なので、利用機会が多いです。
是非使いこなして、効率的な開発を進めていきましょう。
以上、配列を操作するmapの使い方、でした。

ディスカッション
コメント一覧
まだ、コメントがありません