こんにちは!
Yuki (@yukibnb) です。
今回はGoogle Apps Script (GAS) を使って配列の各要素を連結して文字列を作成する方法を紹介します。
では見ていきましょう!
はじめに: 実現したいこと
今回実現したいことは、この画像のように配列の各要素を連結して文字列を作成することです。
連結の際に任意の区切り文字を指定することができます。
画像の例では一次元配列から文字列を作成していますが、二次元配列から文字列を作成する方法も紹介します。
≪join≫ 配列の各要素を連結して文字列を作成する
公式
配列に対してjoin
メソッドを使用すると、配列の各要素を連結して文字列を作成することができます。
括弧内に任意の文字列を入力すると、各要素を連結する際にその文字列が区切り文字として使用されます。
括弧内に何も入力しないと区切り文字はカンマになります。
では一次元配列と二次元配列それぞれの具体例を見ていきましょう。
一次元配列の場合
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メソッドを使用するとこうなる
二次元配列に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
メソッドを使用し、作成された文字列を変数tempOffice
にpush
します。
for文のループ終了時点で変数tempOffice
は、["田中&東京", "山田&大阪", "木村&福岡"]
という一次元配列になっています。
最後に変数tempOffice
に対してjoin
メソッドを使用し、変数allOffices
に格納します。
変数allOffices
のログを確認すると"田中&東京&山田&大阪&木村&福岡"
となっていることが分かります。
ひと手間増えましたが無事二次元配列の全要素を同じ区切り文字で連結することができました。
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) を使って配列の各要素を連結して文字列を作成する方法を紹介しました。
スプレッドシートから情報を取得してメールを送信する際など、配列から文字列を作成したい場合に活用できます。
次回もご期待ください!