JavaScript map関数を使用して必要な要素のみで配列を生成する
こんにちは。ふっくんです。
今回は、 javascript
の map
関数をご紹介します。
map関数の使い方
map関数で何ができるかというと 配列の全ての要素の中から必要な要素のみを取り出し、新たな配列を生成することができます!
例えば、以下のような連想配列があるとしましょう。
const animals = [
{'id': 1, 'category': 'animal', 'kind': 'dog'},
{'id': 2, 'category': 'animal', 'kind': 'cat'},
{'id': 3, 'category': 'animal', 'kind': 'bird'},
]
この配列を使って kind
だけの配列を生成したい時ってありませんか?
僕はよくあります。(笑)
さて、どうするか。。。。
まず、頭に思い浮かぶのは for
文で key
value
を使って、配列に追加しようとするやり方ではないでしょうか。
僕はそうでした。(笑)
実際に for
文を書いてみるとこんな感じでしょうか。
const animals = [
{'id': 1, 'category': 'animal', 'kind': 'dog'},
{'id': 2, 'category': 'animal', 'kind': 'cat'},
{'id': 3, 'category': 'animal', 'kind': 'bird'},
]
const kinds = []
for (const key in animals) {
kinds.push((animals[key].kind))
}
console.log(kinds)
出力結果
[
"dog",
"cat",
"bird"
]
kinds
という配列を生成したいので、まず kinds
を初期化して for
文で animals
の中から key
value
で kind
の値を抜き出して、配列に push
して、、、、
長い!!!
説明も長いし、ソースコードも4行も書かないといけない!
はい、そこで map
関数の出番です!
map
関数を使えば以下のように書けます。
const animals = [
{'id': 1, 'category': 'animal', 'kind': 'dog'},
{'id': 2, 'category': 'animal', 'kind': 'cat'},
{'id': 3, 'category': 'animal', 'kind': 'bird'},
]
const kinds = animals.map(x => x.kind)
console.log(kinds)
出力結果
[
"dog",
"cat",
"bird"
]
先ほどの for
文と同じ結果を得るのに たった1行で書けるのです!
私は感動しました。
説明をしておくと、 x
に animals
のオブジェクトが入ってきて、その中から x.kind
で kind
の値を取得しています。
ここでは x
としていますが、 y
でも animal
でもなんでも構いません。
そして map
関数は 処理結果を新しい配列として返してくれます。
だから push
とかをする必要がないんですねー。
過去の記事でC#での書き方も記載しておりますので、こちらもぜひご確認ください! JavaScript 屋さんのための C# LINQ 入門 (2) map / Select
補足情報
上記のコードで使用した const
や => (アロー関数)
は ECMAScript 6 (ES6)
の新機能になります。
const
は宣言文で定数を宣言する際に使用します。つまり、「再宣言」「再代入」はできません。
その他の宣言文として let
があります。これは「再宣言」ができません。
let
で宣言した変数に値を再代入しても問題ありません。
=> (アロー関数)
は function
を書かなくて済むため、従来よりも簡潔に関数を書くことができます。
上記の const kinds = animals.map(x => x.kind)
をアロー関数を使用せずに書くと以下のようになります。
const kinds = animals.map(function(x) {
return x.kind
})
詳しく知りたい方は以下をご確認いただければと思います。 アロー関数 - JavaScript | MDN