GASの配列要素を含むか検索するindexOf、includes、lastIndexOfメソッドを解説

2023年8月19日

Google Apps Script(GAS)の配列に特定要素が含まれるか検索する方法を解説します。

GASで配列の検索ができるindexOfメソッドとlastIndexOfメソッド、includesメソッドに加え、2次元配列での検索方法を紹介します。

配列に特定要素を含むか検索したい

Google Apps Script(GAS)では配列の要素を検索したいケースが多いです。

スプレッドシートから値を取得した場合など、多くのデータが配列として提供されています。

その配列に条件を満たす要素が存在しているか判定して、処理を条件分岐します。

このように配列の値を検索することはGASの配列処理において必要不可欠です。

GASの配列を検索できるメソッド

Google Apps Script(GAS)には配列オブジェクトに配列を検索する関数が用意されています。

引数に指定した文字列に一致した要素があるか検索する関数です。

GASの配列を検索する方法は以下の3つ関数を利用します。

  1. 配列を前方検索するindexOfメソッド
  2. 配列を後方検索するlastIndexOfメソッド
  3. 検索結果を真偽値で出力するincludesメソッド

前掲した3種類のGAS配列の検索メソッドについて、それぞれ解説していきます。

GAS配列を前方検索するindexOfメソッド

1つ目のGoogle Apps Script(GAS)の配列を検索する方法がindexOfメソッドです。

array.indexOf('検索文字列’)

indexOfメソッドは配列オブジェクトで実行できます。

1次元配列内に検索文字列と完全一致する要素があるか前方検索し、一致した要素のindex番号を返してくれます。

もし配列内に検索文字列と合致する要素がなかった場合は「-1」を返す仕様です。

実際に1次元配列でindexOfメソッドを実行するGASサンプルコードを紹介します。

function myFunction() {
  //1次元配列を定義
  const array = ['りんご', 'みかん', 'いちご','みかん'];
  //引数の文字列に完全一致する要素を前方検索し、要素の番号を返す
  console.log(array.indexOf('みかん'));
}
Google Apps Script(GAS)のindexOfメソッドで引数の文字列と完全一致する配列内の要素を前方検索したサンプルコードの実行結果

indexOfの引数に指定した「みかん」は配列内に2つ要素がありました。

ただ前述した通りindexOfメソッドは配列の前の要素から順番に検索し、完全一致する要素を見つけたら結果を返します。

そのため、4番目の要素ではなく、2番目の要素のindex番号である1をログ出力しています。

GAS配列を後方検索するlastIndexOfメソッド

続いてGoogle Apps Script(GAS)での2つ目の検索方法はlastIndexOfメソッドです。

array.lastIndexOf('検索文字列’)

基本的な検索の仕組みはindexOfメソッドと変わりません。

ただ、検索を行う順番が前からでなく、後ろから検索する後方検索であるのがlastIndexOfメソッドの特徴です。

先程紹介したGASのindexOfメソッドのサンプルコードを、lastIndexOfに置き換えてみます。

function myFunction() {
  //1次元配列を定義
  const array = ['りんご', 'みかん', 'いちご','みかん'];
  //引数の文字列に完全一致する要素があればTrue、なければFalseを返す
  console.log(array.lastIndexOf('みかん'));
}

コード自体はほとんど同じで、5行目のconsole.logの中でlastIndexOfメソッドを実行しています。

lastIndexOfメソッドのGASサンプルコードを実行すると、indexOfメソッドの時と実行ログの結果が変化します。

Google Apps Script(GAS)のlastIndexOfメソッドで引数の文字列と完全一致する配列内の要素を後方検索したサンプルコードの実行結果

indexOfメソッドでは配列2番目のみかんの要素番号1でしたが、lastIndexOfメソッドは配列4番目のみかんの要素番号3が出力されます。

ndexOfメソッドのように配列の前から検索するのではなく、後ろから検索したい場合にastIndexOfメソッドを利用します。

検索結果を真偽値で出力するincludesメソッド

Google Apps Script(GAS)で検索する3番目の方法は、includesメソッドです。

array.includes('検索文字列’)

includesメソッドも配列オブジェクトで実行可能なメソッドです。

検索文字列に完全一致する要素が配列に存在する場合はtrue、存在しない場合はfalseを返します。

配列要素に存在する文字列を検索した場合のGASのサンプルコードは以下の通りです。

function myFunction() {
  //1次元配列を定義
  const array = ['りんご', 'みかん', 'いちご','みかん'];
  //引数の文字列に完全一致する要素があればTrue、なければFalseを返す
  console.log(array.includes('みかん'));
}

配列内にある要素と完全一致する文字列をincludes関数の引数に指定しています。

Google Apps Script(GAS)のincludesメソッドで配列の要素に検索文字列が存在するかtrue・falseで判定するサンプルコードの実行結果

そのため、配列内に要素が存在しているため、実行ログにはtrueが出力されています。

includesメソッドの引数を配列内に存在しない文字列に変更すると、falseが返却されます。

Google Apps Script(GAS)のincludesメソッドで配列の要素に検索文字列が存在するかtrue・falseで判定するサンプルコードの実行結果(検索ヒットしない場合)

このようにGASのincludesメソッドでは1次元配列内の要素を検索し、完全一致する場合はtrue、しない場合はfalseを返して判定が可能です。

indexOfとincludesの違い・使い分け

Google Apps Script(GAS)の配列検索方法として、要素のindex番号を返すindexOfとlastIndexOf、真偽値(true/false)を返すincludesの3つを紹介しました。

indexOf(lastIndexOf)とincludesはどのように使い分ければよいでしょうか。

配列の検索機能的には要素を検索した上で、完全一致した要素のindex番号を返すindexOf(lastIndexOf)メソッドが便利です。

indexOf(lastIndexOf)メソッドが0より小さい場合は検索にヒットせず、0以上だと検索に合致した位置が判別できます。

ただ、includesメソッドは引数の検索文字列が配列内に存在するか判定し、true/falseを返すため直感的で分かりやすいです。

そのため、検索文字列が配列内に含まれるかどうか判定したい場合はincludesメソッドを利用しましょう。

indexOfで2次元配列を検索したい場合は?

ここまではGoogle Apps Script(GAS)の1次元配列の検索を行ってきました。

GASではスプレッドシートのセル範囲から値を取得するため、2次元配列を扱うことが多いです。

しかし、今回紹介したindexOf(lastIndexOf)とincludesは2次元配列では実行できません。

2次元配列に対して配列に含まれる文字列でindexOfメソッドを実行しても、存在しないとして-1が返ってきます。

Google Apps Script(GAS)のindexOf(lastIndexOf)やincludesメソッドは2次元配列では実行しても-1やfalseしか返却されない

2次元配列でindexOfやincludesメソッドで検索するにはどうすればよいでしょうか。

GASで2次元配列のまま検索したい場合は、1つ目の添字を指定して、indexOfやincludesメソッドを実行します。

Google Apps Script(GAS)の2次元配列でindexOf(lastIndexOf)やincludesメソッドを実行するには1つ目の添字を指定

2次元配列の1つ目の添字を指定することで、1次元配列として配列の検索が可能になります。

ただ、この方法では添字で指定した行の1次元配列しか検索できず、他の添字まで検索されません。

2次元配列の全ての要素に対して検索したい場合は、flatメソッドを使い1次元配列に変換します。

※flatメソッドを使ってGASの2次元配列を1次元配列に変換する方法は下記の記事で解説しています。

flatメソッドで2次元配列を1次元配列に変換してしまえば、indexOfやincludesで全ての要素に検索可能になります。

function myFunction() {
  //GASで2次元配列を定義する
  const array2d = [
    ['りんご', 'みかん', 'いちご'],
    ['ぶどう','マスカット','ベリー'],
    ['メロン','すいか','パイナップル']
  ];
  //完全一致する要素を前方検索し、要素の番号を返す
  //flatメソッドで1次元配列に変換して検索も可能
  console.log(array2d.flat(1).indexOf('ベリー'));
}
Google Apps Script(GAS)の2次元配列でindexOf(lastIndexOf)やincludesメソッドを実行するため、flatメソッドで2次元配列を1次元配列に変換した上で検索するサンプルコード

このようにflatメソッドで1次元配列に変換することで、2次元配列の要素全てに対して検索できるようになりました。

ただし、1次元配列に変換した後の要素のindex番号が出力されますので、再度2次元配列の添字ペアに変換が必要です。

まとめ・終わりに

今回、Google Apps Script(GAS)の配列要素を検索する方法を紹介しました。

GASの配列に文字列が含まれているか検索する方法として、①indexOf、②lastIndexOf、③includesの3つの配列検索メソッドがあります。

indexOf(lastIndexOf)メソッドは検索文字列と完全一致する要素のindex番号を返してくれます。

includesメソッドは検索文字列と完全一致する要素が存在する場合はtrue、存在しない場合はfalseを返してくれます。

indexOf(lastIndexOf)メソッドのほうが検索合致した要素のindex番号がわかるので便利ですが、includesメソッドのほうがシンプルです。

ただ、いずれの検索メソッドも1次元配列でしか実行できないため、2次元配列やn次元配列の場合は1次元配列化した上で実行する必要があります。

GASで配列の要素を検索したい場合は、今回紹介した①indexOf、②lastIndexOf、③includesの3つの配列検索メソッドを活用しましょう。