🐡

【GAS】配列操作を極める:基本から応用まで

2024/06/23に公開

Google Apps Script(GAS)は、Googleの各種サービスを効率的に操作するための強力なツールです。特に、配列操作はスクリプトの中で非常に頻繁に使用されます。本記事では、GASでの配列操作に関する基本的なメソッドから、より高度な操作を可能にするメソッドまで、詳細に解説します。初心者の方にも理解しやすいように、各メソッドの使い方とともに例を紹介しますので、ぜひ参考にしてください。

配列の宣言

配列の宣言は、他のプログラミング言語と同様に非常にシンプルです。以下のように記述します。

// 空の配列を宣言
const array = [];

// 初期値を持つ配列を宣言
const fruits = ["Apple", "Banana", "Cherry"];

解説

  • 空の配列: const array = []; は、空の配列を宣言します。何も要素が含まれていない状態です。
  • 初期値を持つ配列: const fruits = ["Apple", "Banana", "Cherry"]; は、3つの要素を持つ配列を宣言します。この場合、配列にはすでに "Apple", "Banana", "Cherry" が含まれています。

配列への要素追加

配列に要素を追加するには、pushメソッドを使用します。

const fruits = ["Apple", "Banana"];
fruits.push("Cherry");

console.log(fruits); // ["Apple", "Banana", "Cherry"]

また、unshiftメソッドを使用すると、配列の先頭に要素を追加できます。

const fruits = ["Apple", "Banana"];
fruits.unshift("Cherry");

console.log(fruits); // ["Cherry", "Apple", "Banana"]

解説

  • pushメソッド: 配列の末尾に要素を追加します。例では、"Cherry" が末尾に追加されました。
  • unshiftメソッド: 配列の先頭に要素を追加します。例では、"Cherry" が先頭に追加されました。

配列からの要素削除

配列から要素を削除するには、popおよびshiftメソッドを使用します。popは配列の最後の要素を削除し、shiftは最初の要素を削除します。

const fruits = ["Apple", "Banana", "Cherry"];
fruits.pop();

console.log(fruits); // ["Apple", "Banana"]

fruits.shift();

console.log(fruits); // ["Banana"]

解説

  • popメソッド: 配列の最後の要素を削除します。例では、"Cherry" が削除されました。
  • shiftメソッド: 配列の最初の要素を削除します。例では、"Apple" が削除されました。

配列の要素検索

配列の中から特定の要素を検索するには、indexOfおよびincludesメソッドを使用します。

const fruits = ["Apple", "Banana", "Cherry"];
const index = fruits.indexOf("Banana");

console.log(index); // 1

const hasApple = fruits.includes("Apple");

console.log(hasApple); // true

解説

  • indexOfメソッド: 配列内の特定の要素の位置(インデックス)を返します。要素が見つからない場合は -1 を返します。例では、"Banana" のインデックスは 1 です。
  • includesメソッド: 配列に特定の要素が含まれているかどうかをチェックします。例では、"Apple" が含まれているため、true が返されました。

配列の長さ取得

配列の長さを取得するには、lengthプロパティを使用します。

const fruits = ["Apple", "Banana", "Cherry"];
const length = fruits.length;

console.log(length); // 3

解説

  • lengthプロパティ: 配列の要素数を返します。例では、3 つの要素が含まれているため、3 が返されました。

配列の逆転

配列の順序を逆転させるには、reverseメソッドを使用します。

const fruits = ["Apple", "Banana", "Cherry"];
fruits.reverse();

console.log(fruits); // ["Cherry", "Banana", "Apple"]

解説

  • reverseメソッド: 配列の要素の順序を反転させます。例では、元の配列 ["Apple", "Banana", "Cherry"] が ["Cherry", "Banana", "Apple"] に逆転されました。

配列の結合

複数の配列を結合するには、concatメソッドを使用します。

const fruits = ["Apple", "Banana"];
const moreFruits = ["Cherry", "Date"];
const allFruits = fruits.concat(moreFruits);

console.log(allFruits); // ["Apple", "Banana", "Cherry", "Date"]

解説

  • concatメソッド: 複数の配列を結合し、新しい配列を作成します。元の配列は変更されません。例では、["Apple", "Banana"] と ["Cherry", "Date"] が結合されて、["Apple", "Banana", "Cherry", "Date"] という新しい配列が作成されました。

スプレッド構文を使用する配列の結合

スプレッド構文を使用すると、簡単に複数の配列を結合することができます。

const fruits = ["Apple", "Banana"];
const moreFruits = ["Cherry", "Date"];
const allFruits = [...fruits, ...moreFruits];

console.log(allFruits); // ["Apple", "Banana", "Cherry", "Date"]
const fruits = ["Apple", "Banana"];
const moreFruits = ["Cherry", "Date"];
fruits.push(...moreFruits);

console.log(fruits); // ["Apple", "Banana", "Cherry", "Date"]

解説

  • スプレッド構文: 配列やオブジェクトの要素を展開する構文です。... を使って他の配列の要素を展開し、新しい配列を作成します。

配列の一部を抽出する slice メソッド

sliceメソッドは、配列の一部を抽出して新しい配列を作成します。元の配列は変更されません。

使用方法

const fruits = ["Apple", "Banana", "Cherry", "Date"];
const slicedFruits = fruits.slice(1, 3);

console.log(slicedFruits); // ["Banana", "Cherry"]

解説

  • sliceメソッドは、開始位置と終了位置(終了位置は含まない)を指定して、指定された範囲の要素を抽出します。
  • 例では、インデックス1からインデックス3までの要素が抽出され、新しい配列["Banana", "Cherry"]が作成されます。

配列の要素を削除・追加する splice メソッド

spliceメソッドは、配列の指定した位置にある要素を削除したり、そこに新しい要素を追加したりできます。

使用方法

const fruits = ["Apple", "Banana", "Cherry", "Date"];
fruits.splice(2, 1, "Blueberry", "Cantaloupe");

console.log(fruits); // ["Apple", "Banana", "Blueberry", "Cantaloupe", "Date"]

解説

  • spliceメソッドは、開始位置と削除する要素数、追加する要素を指定します。
  • 例では、インデックス2から1つの要素("Cherry")が削除され、その位置に"Blueberry"と"Cantaloupe"が追加されました。

配列の各要素に関数を適用する map メソッド

mapメソッドは、配列の各要素に対して関数を適用し、その結果を新しい配列として返します。

使用方法

const numbers = [1, 2, 3, 4];
const doubledNumbers = numbers.map(function(number) {
  return number * 2;
});

console.log(doubledNumbers); // [2, 4, 6, 8]

解説

  • mapメソッドは、配列の各要素に対して指定された関数を適用し、その結果を新しい配列として返します。
  • 例では、各要素に2を掛けた結果の配列 [2, 4, 6, 8] が作成されました。

条件に合致する要素を抽出する filter メソッド

filterメソッドは、配列の中から条件に合致する要素だけを抽出して新しい配列を作成します。

使用方法

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(function(number) {
  return number % 2 === 0;
});

console.log(evenNumbers); // [2, 4]

解説

  • filterメソッドは、各要素に対して指定された条件をチェックし、条件に合致する要素を新しい配列として返します。
  • 例では、偶数の要素だけを抽出して [2, 4] という新しい配列が作成されました。

もちろん、配列の操作に役立つその他のメソッドについても解説します。以下に、よく使用される配列メソッドをいくつか紹介します。

forEach メソッド

forEachメソッドは、配列の各要素に対して関数を一度ずつ実行します。

使用方法

const fruits = ["Apple", "Banana", "Cherry"];
fruits.forEach(function(fruit, index) {
  console.log(index + ": " + fruit);
});
// 出力:
// 0: Apple
// 1: Banana
// 2: Cherry

解説

  • forEachメソッド: 配列の各要素に対して指定された関数を実行します。関数は、要素、インデックス、配列全体の3つの引数を受け取ることができます。

find メソッド

findメソッドは、配列の中から条件に合致する最初の要素を返します。

使用方法

const numbers = [1, 2, 3, 4, 5];
const found = numbers.find(function(number) {
  return number > 3;
});

console.log(found); // 4

解説

  • findメソッド: 条件に合致する最初の要素を返します。条件に合致する要素が見つからない場合は undefined を返します。

findIndex メソッド

findIndexメソッドは、配列の中から条件に合致する最初の要素のインデックスを返します。

使用方法

const numbers = [1, 2, 3, 4, 5];
const index = numbers.findIndex(function(number) {
  return number > 3;
});

console.log(index); // 3

解説

  • findIndexメソッド: 条件に合致する最初の要素のインデックスを返します。条件に合致する要素が見つからない場合は -1 を返します。

some メソッド

someメソッドは、配列の中に条件に合致する要素が少なくとも一つ存在するかどうかをチェックします。

使用方法

const numbers = [1, 2, 3, 4, 5];
const hasEvenNumber = numbers.some(function(number) {
  return number % 2 === 0;
});

console.log(hasEvenNumber); // true

解説

  • someメソッド: 条件に合致する要素が少なくとも一つ存在するかどうかをチェックします。条件に合致する要素が見つかった場合は true を、見つからなかった場合は false を返します。

every メソッド

everyメソッドは、配列の全ての要素が条件に合致するかどうかをチェックします。

使用方法

const numbers = [2, 4, 6, 8];
const allEven = numbers.every(function(number) {
  return number % 2 === 0;
});

console.log(allEven); // true

解説

  • everyメソッド: 配列の全ての要素が条件に合致するかどうかをチェックします。全ての要素が条件に合致する場合は true を、そうでない場合は false を返します。

reduce メソッド

reduceメソッドは、配列の各要素に対して指定された関数を実行し、その結果を一つの値として返します。

使用方法

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce(function(accumulator, currentValue) {
  return accumulator + currentValue;
}, 0);

console.log(sum); // 10

解説

  • reduceメソッド: 配列の各要素に対して指定された関数を実行し、その結果を一つの値として返します。関数は、累積値、現在の要素、インデックス、配列全体の4つの引数を受け取ることができます。第二引数として初期値を設定できます。

sort メソッド

sortメソッドは、配列の要素をソートします。

使用方法

const fruits = ["Banana", "Apple", "Cherry"];
fruits.sort();

console.log(fruits); // ["Apple", "Banana", "Cherry"]

const numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});

console.log(numbers); // [1, 2, 3, 4, 5]

解説

  • sortメソッド: 配列の要素をソートします。デフォルトでは、要素を文字列としてソートします。数値のソートには、比較関数を指定する必要があります。

join メソッド

joinメソッドは、配列の全ての要素を文字列として連結し、新しい文字列を作成します。

使用方法

const fruits = ["Apple", "Banana", "Cherry"];
const fruitString = fruits.join(", ");

console.log(fruitString); // "Apple, Banana, Cherry"

解説

  • joinメソッド: 配列の全ての要素を文字列として連結し、新しい文字列を作成します。引数として指定された文字列を各要素の間に挿入します。

まとめ

今回は、GASでの配列操作に関する基本から応用まで、さまざまなメソッドを紹介しました。これらのメソッドを理解し活用することで、効率的なスクリプト作成が可能になります。以下に各メソッドの特徴をまとめます。

  • 宣言: 空の配列や初期値を持つ配列を作成。
  • 追加: pushで末尾に、unshiftで先頭に要素を追加。
  • 削除: popで末尾を、shiftで先頭を削除。
  • 検索: indexOfで位置を、includesで存在をチェック。
  • 長さ: lengthプロパティで要素数を取得。
  • 逆転: reverseで順序を反転。
  • 結合: concatで配列を結合。
  • 抽出: sliceで一部を抽出。
  • 削除・追加: spliceで指定位置の要素を削除・追加。
  • 変換: mapで各要素に関数を適用。
  • フィルタ: filterで条件に合致する要素を抽出。
  • forEach: 各要素に対して関数を一度ずつ実行
  • find: 条件に合致する最初の要素を返す
  • findIndex: 条件に合致する最初の要素のインデックスを返す
  • some: 条件に合致する要素が少なくとも一つ存在するかチェック
  • every: 全ての要素が条件に合致するかチェック
  • reduce: 各要素に対して関数を実行し、その結果を一つの値として返す
  • sort: 要素をソート
  • join: 全ての要素を文字列として連結

これらのメソッドを駆使して、効率的でパワフルなスクリプトを作成しましょう。

Discussion