【GAS講座】mapメソッドは連携魔法!モンスターたちを一斉強化!

GASでよく出てくる map() ってなんですか? なんだか呪文みたいで怖いです…。
猫男
猫男
catman
catman
ふふふ… map() はまさに“連携魔法”!一斉にカード(配列)へ効果を与える強力な技だ。詳しく解説しよう!

 

gas mapメソッド

 

GASで使うmapメソッドの使い方

前回に引き続き、モンスターカードの世界に例えて解説するぞ。

配列(Array)は「モンスター軍団」だ!

まず、map()は配列(Array)に使えるメソッドだ。
配列とは、複数のモンスターカードを並べたデッキのようなもの!

 const monsters = ["ドラゴン", "マジシャン", "ハネボー"]; 

このままだと、名前だけのモンスターたち。
ここに“強化魔法”をかけてみよう!

map() は全体強化魔法!

map() は配列のすべての要素に“効果”を与える魔法のメソッド。

 const poweredUp = monsters.map(name => name + "【攻撃力+500】"); Logger.log(poweredUp); 
おお!全員が「攻撃力+500」になってる…!魔法カードみたい!
猫男
猫男
catman
catman
そう!mapは“全体魔法”。1体ずつ処理しなくても一斉に効果を与えられるのだ!

仕組み:1体ずつ処理して新しい軍団を作る!

実は map() の中身はこう動いている。

  • 元の配列を1体ずつ取り出す
  • 指定した処理(攻撃力アップなど)を行う
  • 新しい配列にして返す
 const newArray = oldArray.map(function(value, index, array) { // value = 値 // index = 位置(0からスタート) // array = 元の配列 }); 

実用例:スプレッドシートの値を一括変換!

たとえば、スプレッドシートの列データを全部「さん」付けにしたいならこうだ。

 function addSanToNames() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const names = sheet.getRange("A2:A10").getValues().flat(); // 1次元配列に const updated = names.map(name => name + "さん"); Logger.log(updated); } 
わあ〜!一人ずつじゃなく、全員に“さん”をつけられました!
猫男
猫男
catman
catman
それが map の力!カード軍団を一気に変身させる“最強の連携魔法”なのだ!

練習問題

問題
あなたは「カード名の一覧」を持っています。すべてのカード名の末尾に「【属性:光】」を追加してください。

 const cards = ["エルフ", "ドラゴン", "ナイト"]; 

解答

 const updated = cards.map(name => name + "【属性:光】"); Logger.log(updated); 

解説

配列の要素(名前)を1つずつ受け取り、加工

もとの配列を壊さず、新しい配列として生成

出力はこうなる:

 [ "エルフ【属性:光】", "ドラゴン【属性:光】", "ナイト【属性:光】" ] 

まとめ

  • map()は配列に使う魔法
  • すべての要素に処理をかけて新しい配列を返す
  • “一括強化”や“全員変身”にピッタリ
わかりました!map()はモンスターたちに一斉に魔法をかける感じですね!
猫男
猫男
catman
catman
その通り!うまく使いこなせば、君のスクリプトも進化するぞ!