SpreadSheet

GoogleAppsScriptの配列mapメソッドと使い方

GoogleAppsScriptで配列を取得処理を組んだ際に、mapメソッドを使った記法を学んだのでメモ。

mapメソッドとは?

mapメソッドは、JavaScriptの配列操作における最も便利な高階関数の一つ。

配列の各要素に対して指定した関数を適用し、その結果から新しい配列を生成します。元の配列を変更せずに新しい配列を返す点が大きな特徴です。

基本的な構文

const newArray = array.map(callback(currentValue[, index[, array]]) {
  // return element for newArray
}[, thisArg]);

パラメータ詳細

  • callback: 配列の各要素に対して実行される関数
  • currentValue: 処理中の現在の要素
  • index(オプション): 現在処理中の要素のインデックス
  • array(オプション): mapメソッドが呼び出された元の配列
  • thisArg(オプション): callback関数内でのthisの値を指定

mapメソッドの動作原理

  1. 配列の反復処理: 配列の各要素に対してcallback関数を順番に呼び出します。
  2. 新しい配列の生成: callback関数の戻り値を使用して、新しい配列を作成します。
  3. 元の配列の保持: 元の配列は変更されません。

実践的な使用例GAS

1. 数値の変換

A1~D1に入っている数値をmapメソッドで要素を3倍にしてA3~D3に書き込むGAS

function writeTripledNumbersToSheet() {
  // スプレッドシートのアクティブなシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // A1からD1の範囲から値を取得
  const numbers = sheet.getRange(1, 1, 1, 4).getValues()[0]; // 1行4列の配列を取得
  
  // 各要素を3倍にする
  const tripled = numbers.map(num => num * 3);
  
  // 結果をスプレッドシートのA3からD3に書き込む
  sheet.getRange(3, 1, 1, tripled.length).setValues([tripled]);
}

2. 文字列の変換

A1~C1に記載されている英字小文字をmapメソッドで要素を大文字にしてA3~C3に書き込むGAS

function writeUppercasedNamesToSheet() {
  // スプレッドシートのアクティブなシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // A1からC1の範囲から値を取得
  const names = sheet.getRange(1, 1, 1, 3).getValues()[0]; // 1行3列の配列を取得
  
  // 各要素を大文字に変換する
  const uppercasedNames = names.map(name => name.toUpperCase());
  
  // 結果をスプレッドシートのA3からC3に書き込む
  sheet.getRange(3, 1, 1, uppercasedNames.length).setValues([uppercasedNames]);
}

3. オブジェクト配列の操作

取得した配列からname要素だけを取得する

const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];
const userNames = users.map(user => user.name);
console.log(userNames); // ['Alice', 'Bob', 'Charlie']

mapメソッドの利点

  • 簡潔なコード: ループ処理を簡単に、読みやすく記述できます。
  • 不変性: 元の配列を変更せず、新しい配列を生成します。
  • 関数型プログラミング: 宣言的なプログラミングスタイルに適しています。
  • 多様な用途: データ変換、整形、抽出など、幅広いシナリオで使用可能です。

注意点と推奨事項

  • 空のスロットを持つ配列に対しては、mapメソッドは要素を処理しません。
  • 戻り値を使用しない場合は、forEachメソッドの使用を検討してください。
  • パフォーマンスが重要な場合は、従来のforループも考慮に値します。

まとめ

mapメソッドは、JavaScriptの配列操作において非常に強力で柔軟なメソッドです。データ変換を簡潔かつ読みやすく実行でき、関数型プログラミングの原則に沿った優雅な実装を可能にします。...と、ほとんどAIに教えてもらったので精進します!

参照元

  • MDN Web Docs: Array.prototype.map()
  • JavaScript.info: Transformation of arrays
  • Eloquent JavaScript: Higher-Order Functions

参照元

-SpreadSheet