Yuki's bnb blog

こんにちは!Yukiといいます。本業のかたわら大阪で2016年夏から民泊運営のお手伝いをしています。民泊業務に関する様々なことを自動化・効率化したいと思い日々活動しています。 お気軽にコメント・お問い合わせください :) TOEICスコア 985

【簡単!】GASで配列の各要素を連結して文字列を作成する方法

Google Apps Script Array join

こんにちは!
Yuki (@yukibnb) です。

今回はGoogle Apps Script (GAS) を使って配列の各要素を連結して文字列を作成する方法を紹介します。

では見ていきましょう!

 

はじめに: 実現したいこと

Google Apps Script Array join

今回実現したいことは、この画像のように配列の各要素を連結して文字列を作成することです。

連結の際に任意の区切り文字を指定することができます。

画像の例では一次元配列から文字列を作成していますが、二次元配列から文字列を作成する方法も紹介します。

 

≪join≫ 配列の各要素を連結して文字列を作成する

公式

Google Apps Script Array join

配列に対してjoinメソッドを使用すると、配列の各要素を連結して文字列を作成することができます。

括弧内に任意の文字列を入力すると、各要素を連結する際にその文字列が区切り文字として使用されます。

memo

括弧内に何も入力しないと区切り文字はカンマになります。

 
では一次元配列と二次元配列それぞれの具体例を見ていきましょう。

 

一次元配列の場合

joinメソッドで文字列を作成しよう

let staffs = ["田中", "山田", "木村"];
let allStaffs = staffs.join("&");

Logger.log(allStaffs); //"田中&山田&木村"

一次元配列に対してjoinメソッドを使用した際の結果はイメージがしやすく特に注意点はありません。

変数staffsは一次元配列であり、その中にスタッフ名の要素が3つあります。

変数staffsに対してjoinメソッドを使用し、その結果を変数allStaffsに格納しました。区切り文字には"&"を指定しました。

Logger.log(allStaffs);でログを確認すると、変数allStaffsの中身が田中&山田&木村という文字列になっていることを確認できます。

 

空白で連結したい場合 (区切り文字を使用せず連結したい場合)

let staffs = ["田中", "山田", "木村"];
let allStaffs = staffs.join();

Logger.log(allStaffs); //"田中,山田,木村"

joinメソッドの括弧内に何も入力しないと区切り文字はカンマになるとお伝えしました。

もし"田中山田木村"のように空白で連結、つまり区切り文字を使用せず連結したい場合、括弧内に""と入力すると空白で連結することができます。

let staffs = ["田中", "山田", "木村"];
let allStaffs = staffs.join("");

Logger.log(allStaffs); //"田中山田木村"

 

改行で連結させたい場合 (要素ごとに改行させたい場合)

let staffs = ["田中", "山田", "木村"];
let allStaffs = staffs.join("\n");

Logger.log(allStaffs);
/*
"田中
山田
木村"
*/

空白でもカンマでもなく各要素を改行で連結させたい場合、区切り文字に改行コード"\n"を入力すると実現できます。

 

二次元配列の場合

二次元配列にjoinメソッドを使用するとこうなる

Google Apps Script Array join

二次元配列にjoinメソッドを使用するとどのような結果になるか見てみましょう。

let offices = [["田中", "東京"],
               ["山田", "大阪"],
               ["木村", "福岡"]];

let allOffices = offices.join("&");

Logger.log(allOffices); //"田中,東京&山田,大阪&木村,福岡"

二次元配列である変数officesに対してjoinメソッドを使うとこのような結果になりました。

["田中", "東京"]["山田", "大阪"]["木村", "福岡"]を区切り文字の"&"で連結し文字列化されました。

ただし["田中", "東京"]["山田", "大阪"]["木村", "福岡"]内の各要素は"&"ではなくカンマで連結されています。

二次元配列に対してjoinメソッドを使用するとこのように結果が少し特殊なので注意が必要です。

いくつか活用事例を見てみましょう。

 

二次元配列の全要素をカンマで連結したい場合

let offices = [["田中", "東京"],
               ["山田", "大阪"],
               ["木村", "福岡"]];

let allOffices = offices.join();

Logger.log(allOffices); //"田中,東京,山田,大阪,木村,福岡"

joinメソッドの括弧内に何も入力しないと、二次元配列内の全要素をカンマで連結して文字列化することができます。

 

二次元配列の全要素を同じ区切り文字で連結したい場合

let tempOffice = [];

let offices = [["田中", "東京"],
               ["山田", "大阪"],
               ["木村", "福岡"]];

//一次元配列office[i]の要素を"&"で連結し、
//変数tempOfficeにpushする
for(let i = 0; i < offices.length; i++) {
  tempOffice.push(offices[i].join("&"));
}

//一次元配列tempOfficeの要素を"&"で連結する
let allOffices = tempOffice.join("&");

Logger.log(tempOffice); //["田中&東京", "山田&大阪", "木村&福岡"]
Logger.log(allOffices); //"田中&東京&山田&大阪&木村&福岡"

"田中&東京&山田&大阪&木村&福岡"という結果を出したい場合、上記のように記述すると実現できます。

まずfor文で二次元配列offices内の各一次元配列に対してjoinメソッドを使用し、作成された文字列を変数tempOfficepushします。

for文のループ終了時点で変数tempOfficeは、["田中&東京", "山田&大阪", "木村&福岡"]という一次元配列になっています。

最後に変数tempOfficeに対してjoinメソッドを使用し、変数allOfficesに格納します。

変数allOfficesのログを確認すると"田中&東京&山田&大阪&木村&福岡"となっていることが分かります。

ひと手間増えましたが無事二次元配列の全要素を同じ区切り文字で連結することができました。

memo

pushメソッドは配列の末尾に要素を追加するメソッドです。今回は空配列tempOfficeに対して要素を追加しました。pushメソッドの詳しい解説は以下記事をご覧ください。
【初心者向けGAS】一次元配列の要素を追加・削除する方法をやさしく解説

 

二つの区切り文字を使用したい場合

let tempOffice = [];

let offices = [["田中", "東京"],
               ["山田", "大阪"],
               ["木村", "福岡"]];

//一次元配列office[i]の要素を": "で連結し、
//変数tempOfficeにpushする
for(let i = 0; i < offices.length; i++) {
  tempOffice.push(offices[i].join(": "));
}

//一次元配列tempOfficeの要素を改行コード"\n"で連結する
let allOffices = tempOffice.join("\n");

Logger.log(tempOffice); //["田中: 東京", "山田: 大阪", "木村: 福岡"]
Logger.log(allOffices);
/*
"田中: 東京
山田: 大阪
木村: 福岡"
*/

先ほど紹介した二次元配列の全要素を同じ区切り文字で連結するスクリプト内では、for文の中と外の2か所でjoinメソッドを使用しました。

joinメソッドの区切り文字をそれぞれ別々に入力すると、上記のように二つの区切り文字を使用して連結することができます。

 

まとめ

今回はGoogle Apps Script (GAS) を使って配列の各要素を連結して文字列を作成する方法を紹介しました。

スプレッドシートから情報を取得してメールを送信する際など、配列から文字列を作成したい場合に活用できます。

次回もご期待ください!