【コピペで完了】GAS 配列 検索の実装方法と注意点

GAS

配列の中から特定の値のインデックスを検索するの実装コード

Google Apps Script(GAS)において、配列内から特定の要素(文字列や数値など)の位置(インデックス番号)を検索・取得するには、JavaScript標準のindexOf()メソッドを使用するのが最もシンプルで効率的です。以下のコードを実行すると、配列「array」の中から「みかん」という要素のインデックス(0から始まる位置番号)を取得してログに出力します。

const array = ["りんご", "みかん", "バナナ"];
const index = array.indexOf("みかん");
Logger.log(index);

仕様と技術的な注意点

indexOf()メソッドの基本的な役割は、指定した値が配列の中に存在するかを先頭から順に検索し、最初に見つかった位置のインデックス番号(0から始まる整数)を返すことです。今回の例のように先頭から2番目にある「みかん」を検索した場合は、数値の「1」が返されます。

もし指定した値が配列内に見つからなかった場合は、戻り値として「-1」が返される仕様になっています。この特性を利用することで、単に要素の位置を特定するだけでなく、「取得したインデックスが -1 以外であるか(index !== -1)」をチェックし、リスト内に目的のデータが存在するか確認する条件分岐としても非常に便利に活用できます。

技術的な落とし穴として注意すべきなのは、indexOf()が厳密な判定を行うため、文字列の大文字・小文字を明確に区別するという点です。例えば、配列内に「Apple」がある状態で「apple」を検索しても、大文字小文字が異なるため不一致とみなされ -1 が返されます。大文字小文字を区別せずに検索を行いたい場合は、あらかじめtoLowerCase()などで双方の表記を全小文字に統一してから検索を行うと確実にヒットさせることができます。

実務での活用シーンとハマりポイント

実務の業務自動化においては、Googleスプレッドシートの特定列を配列として読み込み、キーとなるデータ(メールアドレスや商品コードなど)を検索して行番号を特定するシーンでよく使われます。検索によって取得したインデックス番号に「1」を足すことで、スプレッドシート上の実際の行番号と連動させ、特定行のデータを更新・取得するロジックを組むことができます。

開発者が陥りがちなハマりポイントとして、スプレッドシートからgetValues()で取得したデータが「2次元配列([[行1のデータ], [行2のデータ]])」になっている点があります。2次元配列に対して直接indexOf()を実行しても正しく検索できないため、map()flat()を使って検索対象の列を1次元配列に変換してからindexOf()を適用するなどの前処理が必要です。

また、データ型の不一致によるトラブルも多発します。スプレッドシートから読み込んだ値が数値を表す文字列(例: “100”)であり、検索条件が数値型(例: 100)である場合、indexOf()は厳密な等価比較(===)を行うため一致しません。型による検索漏れを防ぐために、あらかじめ検索対象とキーワードのデータ型(文字列型か数値型か)を統一しておくことが重要です。

この処理の基本メカニズム

indexOf()メソッドは、配列の先頭(インデックス0)から末尾に向かって順番に各要素を走査し、検索対象の値と一致する要素を探すリニアサーチ(線形検索)のメカニズムで動作します。オブジェクトの比較処理を内部で自動化してくれるため、開発者が自身でfor文やwhile文といった繰り返し構文を書く必要がありません。

GASでの開発において、膨大なデータリストの中から目的の要素を抽出し、適切な処理に割り振るロジックは業務効率化の根幹をなします。indexOf()の戻り値の仕様や型の扱いを直感的に理解しておくことで、スプレッドシート連携をはじめとする各種データの探索・照合処理を最小限のコード量で安全に実装できるようになります。

※本記事は基本的なロジックおよび構文解説です。最新の仕様についてはGoogle Apps Script (GAS)の公式ドキュメントをご確認ください。

タイトルとURLをコピーしました