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メソッドの動作原理
- 配列の反復処理: 配列の各要素に対して
callback
関数を順番に呼び出します。 - 新しい配列の生成:
callback
関数の戻り値を使用して、新しい配列を作成します。 - 元の配列の保持: 元の配列は変更されません。
実践的な使用例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
参照元