GASの2次元配列を1次元配列に変換する方法(flatメソッド)※n次元も

2023年8月18日

Google Apps Script(GAS)の2次元配列はそのままだと処理が手間なので、1次元配列に変換したい場合があります。

2次元配列を1次元配列に変換でき、3次元配列やn次元配列にも適応可能なflatメソッドの使い方を解説します。

GASでは2次元配列を扱うことが多い

Google Apps Script(GAS)では2次元配列を処理する機会が多いです。

GASのデータ読み取り先としてスプレッドシートのセルの値をよく取得します。

Google Apps Script(GAS)でシート名を取得するために用意したスプレッドシート

1つのセルを取得する場合は単体の値ですが、複数のセルを範囲で取得すると2次元配列になるからです。

スプレッドシート以外にも各種GASメソッドを実行した結果の戻り値が2次元配列であることもあります。

GASで様々なデータ処理を行う上で、2次元配列を取り扱うケースが増えていきます。

2次元配列を1次元配列に変換したい

そんな2次元配列はそのままだとGoogle Apps Script(GAS)で処理が難しいケースがあります。

例えば配列の検索を行うindexOf関数は配列の1次元要素しか適用できません。

2次元配列の中に合致する要素があっても、indexOfの結果は検索に合致しなかったことを示す-1が戻り値として返ってきます。

その場合には2次元配列の1つ目の添字を指定してindexOfメソッドを実行する必要があります。

また、引数に指定した文字列が要素に存在するか、GASのincludesメソッドで判定するのも大変です。

ただ、2次元配列を1次元配列に変換すれば、indexOfメソッドやincludesメソッドも実行できます。

そうしたケースで2次元配列を1次元配列に変換できると便利です。

GASの2次元配列を1次元配列に変換するflatメソッド

Google Apps Script(GAS)で2次元配列を1次元配列に変換する方法として、flatメソッドが用意されています。

flatメソッドは配列型変数のArrayオブジェクトで実行可能です。

array1d= array2d.flat(1)

引数に指定した数字を引いた次元数に変換した配列が戻り値で得られます。

※flatメソッドはGASのV8ランタイムを有効にしている場合に利用できます。

Google Apps Script(GAS)のtruncはV8ランタイムでのみ利用可能

GASのプロジェクトの設定にある「Chrome V8 ランタイムを有効にする」のチェックを外すとflatメソッドは実行できなくなります。

2次元→1次元配列に変更するGASサンプルコード

実際にGoogle Apps Script(GAS)のflatメソッドを使って2次元配列を1次元配列に変換する方法を解説します。

下記のコードが2次元配列でflatメソッドを実行して1次元配列に変換するGASサンプルコードです。

function array2dTo1d() {
  //GASで2次元配列を定義する
  const array2d = [
    ['りんご', 'みかん', 'いちご'],
    ['ぶどう','マスカット','ベリー'],
    ['メロン','すいか','パイナップル']
  ];
  //2次元配列のまま実行ログに出力
  console.log(array2d);
  //flatメソッドで2次元配列を1次元配列に変換
  const array1d = array2d.flat(1);
  //flatメソッドで変換後の1次元配列を実行ログに出力
  console.log(array1d);
}
Google Apps Script(GAS)のflatメソッドで2次元配列を1次元配列に変換するサンプルコード

定数として定義した2次元配列array2dに対し、array2d.flat(1)を実行した戻り値をarray1dに格納します。

GASサンプルコードを実行すると、flatメソッド実行前と実行後の配列がそれぞれ実行ログに出力されます。

Google Apps Script(GAS)のflatメソッドで2次元配列を1次元配列に変換するサンプルコードを実行すると、実行ログに1次元配列に変換した結果が出力

2次元配列だったのが、flatメソッドで1次元配列に変換されていることが確認できます。

このようにGASで2次元配列を1次元配列に変換可能です。

3次元配列でも変換可能

先程のGoogle Apps Script(GAS)のサンプルコードは2次元配列に対してflatメソッドを実行して、1次元配列に変換しました。

flatメソッドは2次元配列だけでなく、3次元配列にも適用することができます。

function array3dTo1d() {
  //GASで3次元配列を定義する
  const array3d = [
    [
      ['りんご', 'みかん', 'いちご'],
      ['ぶどう','マスカット','ベリー'],
      ['メロン','すいか','パイナップル']
    ],
    [
      ['にんじん', 'たまねぎ', 'ネギ'],
      ['かぼちゃ','なす','きゅうり'],
      ['大根','れんこん','かぶ']      
    ]
  ];
  //3次元配列のまま実行ログに出力
  console.log(array3d[0][1][2]);
  //flatメソッドで3次元配列を1次元配列に変換
  const array1d = array3d.flat(2);
  //flatメソッドで変換後の1次元配列を実行ログに出力
  console.log(array1d);
}
Google Apps Script(GAS)のflatメソッドで3次元配列を1次元配列に変換するサンプルコード!n次元配列でも変換可能

3次元配列の場合、1次元配列に変換するにはflatメソッドの引数が2次元配列と異なります。

元の配列の次元数から引数に指定した数値を引くため、1次元配列にするには引数を2にします。

Google Apps Script(GAS)のflatメソッドで3次元配列を1次元配列に変換するサンプルコードを実行した結果、1次元配列に変換

このように2次元配列以外にも3次元配列やn次元配列でもflatメソッドは利用可能です。

GASの配列の次元削減する際にflatメソッドを使うと覚えておきましょう。

1次元配列を2次元配列に変換するには?

本記事では2次元配列を1次元配列に変換する方法を解説してきました。

ただ、逆に1次元配列を2次元配列に変換したいケースもあります。

例えば、スプレッドシートの複数セルに値を書き込むためには1次元配列ではエラーするので2次元配列が必要です。

GASの1次元配列を2次元配列に変換する方法についてもAutoworkerの記事で解説しています。

配列の次元数を増やしたい場合は、リンク先の記事を参考にしてみてください。

まとめ・終わりに

今回、Google Apps Script(GAS)でflatメソッドを使って2次元配列を1次元配列に変換する方法を紹介しました。

flatメソッドを2次元配列変数で実行すると、1次元配列に変換した結果を得ることができます。

GASのflatメソッドは2次元配列だけでなく、3次元配列やn次元配列でも利用可能です。

配列の次元数を削減したい場合には、flatメソッドを活用しましょう。