JavaScript map の使い方 #1

株式会社リュディアです。JavaScript でサポートしている高階関数の1つである mapメソッド(以下、map) についてまとめてみます。掲載するソースコードはすべて GAS の開発環境で動作確認をしています。

JavaScript の 高階関数は慣れると便利なのですが、最初はとっつきにくい機能の1つです。高階関数の難しいことは後回しにし、今回は map に絞って具体的な説明をしていきます。まず以下のサンプルをみてください。

function myFunction1() {
  const inputArray = [ 1, 3, 10, 17, 20, 31 ] ;

  for ( let i = 0; i < inputArray.length; i++ )
    console.log( inputArray[ i ], i, inputArray ) ;
}

// 実行結果
// currentValue index array
//  1           0     [ 1, 3, 10, 17, 20, 31 ]
//  3           1     [ 1, 3, 10, 17, 20, 31 ]
// 10           2     [ 1, 3, 10, 17, 20, 31 ]
// 17           3     [ 1, 3, 10, 17, 20, 31 ]
// 20           4     [ 1, 3, 10, 17, 20, 31 ]
// 31           5     [ 1, 3, 10, 17, 20, 31 ]

べたな記述ですが、整数の配列 inputArray を準備し、for ループで配列の要素、配列のインデクス、配列全体を表示するプログラムです。次に map を使って同じ動作をするプログラムを書いてみます。

function myFunction2() {
  const inputArray = [ 1, 3, 10, 17, 20, 31 ] ;

  inputArray.map( function( currentValue, index, array ) {
                  console.log( currentValue, index, array ) ;
                } );
}

// 実行結果
// currentValue index array
//  1           0     [ 1, 3, 10, 17, 20, 31 ]
//  3           1     [ 1, 3, 10, 17, 20, 31 ]
// 10           2     [ 1, 3, 10, 17, 20, 31 ]
// 17           3     [ 1, 3, 10, 17, 20, 31 ]
// 20           4     [ 1, 3, 10, 17, 20, 31 ]
// 31           5     [ 1, 3, 10, 17, 20, 31 ]

一言で説明すると「map により配列 inputArray の各要素に関数 function を適用する」となります。ここで function はコールバック関数と呼ぶもので、3つの引数の順序が決まっています。この例では currentValue, index, array という変数名を使っていますが a, b, c であっても問題ないです。ただし引数の順序は重要で前から「その時の配列の要素」「その時の配列のインデクス」「配列全体」と決められています。

実行結果を見てみましょう。 currentValue と index は各配列の要素とインデクスなので順に出力されており、ループと同じように動作していることがわかります。3つ目の引数 array は元の配列 inputArray と同じものが保持されていることがわかります。この例は最初なのでコールバック関数で使える3つの引数をすべて記載しましたが、例えば3つめの配列 array が処理に不要であれば省略可能です。

function myFunction3() {
  const inputArray = [ 1, 3, 10, 17, 20, 31 ] ;

  inputArray.map( function( currentValue, index ) {
                  console.log( currentValue, index ) ;
                });
}

// 実行結果
// currentValue index
//  1           0
//  3           1
// 10           2
// 17           3
// 20           4
// 31           5

同様に2つ目の引数 index も不要であれば省略可能です。しかしコールバック関数では引数の順序が重要なので、最初の引数 currentValue のみ省略する、あるいは2つ目の引数 index のみを省略するといった使い方はできません。

今回は map の振る舞いとコールバック関数の引数を中心に説明しましたが、実プログラムで役に立たない例ばかりでしたね。次回は実際に使えそうなコードを使って説明していきます。

では、ごきげんよう。

この記事が気に入ったらサポートをしてみませんか?