Google Apps Script(以下GAS)上で配列、連想配列を扱う際の記述方法について纏めてみます。
・・・と言ってもGAS自体がJavaScriptベースなので、「JavaScriptにおける書き方」でも意味は同じだと思います。
また、長くなりそうな題目なので解説は幾つかに区切る予定です。
まずは配列の「定義の仕方」、「要素の追加/削除」に関して。
配列の定義の仕方
配列には角括弧[]を使用します。
var array = ["test1", "test2", "test3"];
配列内の各要素を取り出す場合は、「配列変数+[添え字]」の形で記述します。
var array1Value = array[0]; var array2Value = array[1];
プログラミング全般に言える事ですが、配列の添え字は基本的に「0」から始まります。一つ目の「”test1″」を取り出したい場合は「array[0]」と記述します。
配列の要素数を知りたい場合は、「.length」と記述する事で配列の中に幾つのデータが存在するかを知る事ができます。
var len = array.length;
array.lengthが5の場合に配列の最後のデータを取得する場合は、「array[4]」と書く事ができます。
要素が5個から変化する事が無ければ「4」と固定で記述しても良いですが、配列のデータ数が変わる可能性があるのであれば「array[array.length – 1]」とするのが良いですね。
配列への要素追加と削除
配列内の要素の追加と削除に関する関数で、基本的なものは以下の通り。
- shift()
- unshift()
- push()
- pop()
- splice()
※関数は他にも多数ありますが、とりあえずよく使いそうなものを代表的に挙げてみました
それぞれ使い方を解説します。
shift()
配列の最初の要素を取り除き、取り除いた要素を返すメソッドです。
var testArray = ["arr1", "arr2", "arr3"]; var elem = testArray.shift(); // elem = "arr1" // testArray = ["arr2", "arr3"]
上記の様に、shift呼び出し後は元の配列の形が変化します。
上の例では新しい変数elemに取り出した値を格納していますが、
var testArray = ["arr1", "arr2", "arr3"]; testArray.shift();
の様に戻り値を格納せず単体で使用しても問題ありません。
この場合でも同様に配列の中身は先頭が取り出された状態に変化します。
unshift()
配列の最初に1つ以上の要素を追加し、追加後の新しい配列の長さを返します。
var testArray = ["arr1", "arr2", "arr3"]; var newLen = testArray.unshift("arr0"); // testArray = ["arr0", "arr1", "arr2", "arr3"]; // newLen = 4
push()
配列の末尾に1つ以上の要素を追加することができます。unshiftと同様に、追加後の新しい配列の長さを返します。
var testArray = ["arr1", "arr2", "arr3"]; var newLen = testArray.push("arr4"); // testArray = ["arr1", "arr2", "arr3", "arr4"] // newLen = 4
pop()
配列の最後の要素を取り除き、取り除いた要素を返すメソッドです。
shiftが先頭の要素を取り除くのに対し、こちらは最後の要素を取り除く関数です。
var testArray = ["arr1", "arr2", "arr3"]; var elem = testArray.pop(); // elem = "arr3" // testArray = ["arr1", "arr2"];
splice()
配列内の指定した位置にある古い要素を取り除きつつ、新しい要素を追加することが可能。簡単にいうと、配列内の好きな所の要素を削除したり、要素を新しく追加する事ができるというもの。
var months = ['Jan', 'March', 'April', 'June']; months.splice(1, 0, 'Feb'); // months = ['Jan', 'Feb', 'March', 'April', 'June'] months.splice(4, 1, 'May'); // months = ['Jan', 'Feb', 'March', 'April', 'May']
1番目の引数には開始位置の配列添え字を指定します。
0始まりなので「1」 = 2番目の要素を指している事になります。
2番目の引数には取り除く要素の数を指定します。
3番目の引数には、追加する要素を記述します。
ということで、「months.splice(1, 0, ‘Feb’);」は配列の2番目の位置に”Feb”という値を追加するという処理になり、「months.splice(4, 1, ‘May’);」は配列の5番目の位置から要素を一つ取り除いた後に”May”を追加するという処理になります。
ちなみに2番目と3番目の引数はOptional(省略可)となりますので、それぞれ以下の様な記述も可能です。
var months = ['Jan', 'March', 'April', 'June']; months.splice(1, 1); // months = ['Jan', 'April', 'June'] months.splice(1); // months = ['Jan']
3番目の追加する要素の指定を省略した場合は要素を取り除くのみ。
2番目の要素も省略した場合は、1番目の開始位置を含む、それ以降の要素を全て取り除くという処理になります。
その他の方法
実は関数に頼らなくても要素を追加する方法があります。
var months = ['Jan', 'March', 'April', 'June']; months[months.length] = "July"; // months = ['Jan', 'March', 'April', 'June', 'July']
monthsの配列に4つの要素を定義しました。
この時の添え字の最大値は [3] です。
要素数は4つですので、「months.length」の戻り値は 「4」 です。
「months[months.length]」というのは「months[4]」という意味になりますが、この様な記述を行うと自動的に5番目の要素としてデータを末尾に追加する事が可能になります。
言語によってはエラーになるのですが、JavaScriptは配列の拡張も勝手にやってくれるみたいです。凄いですよね。
まぁこれはこれで想定外のバグを生み出しそうな気がして怖い様な気もしますが、こういった挙動を知っていれば対策も打てるってものですよね。
ちなみに、更に要素を飛ばして「6番目にいきなり格納する」なんて事もできます。
var months = ['Jan', 'March', 'April', 'June']; months[months.length + 1] = "July"; // months = ['Jan', 'March', 'April', 'June', ,'July']
その場合は上記の様に、間の部分は空データで自動的に埋められます。
以上が配列の定義、要素の追加と削除に関する内容です。
次は連想配列について書く予定です。