下記のようなスプレッドシートがあったとします。
A | B | C | D | E | |
---|---|---|---|---|---|
1 | 1 | 2 | 3 | 4 | 5 |
2 | 11 | 12 | 13 | 14 | 15 |
3 | 21 | 22 | 23 | 24 | 25 |
スプレッドシートから全ての値を取得すると、下記のような二次元配列が取得できます。
[[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
ではこの二次元配列から、B列の値のみを抜き出すにはどうすれば良いでしょうか?
こんな時に便利なのがmap関数です。
map関数では下記のような事が可能です。
//B列 = [2,12,22]
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = values.map(行 => 行[1])
上記で「配列の各要素=行」の2列目の要素(配列は0からカウントする)を抜き出せます。今回なら[2,12,22]を取得できます。
for文で書くと下記と同じような処理になります。
//B列 = [2,12,22]
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = []
for(var i=0;i<values.length;i++)
{
B列.push(values[i][1])
}
「B列を10倍した配列を取得する」ような事もできます。
//B列 = [20,120,220]
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = values.map(行 => 行[1] * 10)
似た関数にforEachがあります。
forEachとmapの違いは戻り値です。map関数では配列が取得できますが、forEach関数は処理をするだけで、値は取得できません。
//B列 = null
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = values.forEach(行 => 行[1])
//B列 = [2,12,22]
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = values.map(行=> 行[1])
スプレッドシートの値を取得すると、行ごとに二次元配列で値を取得できます。そのため列単位で何かをしようとすると困ってしまう事も多いです。
map関数を使えば列単位で情報を処理する事ができるようになるでしょう。