【GAS】連想配列の使い方(定義、要素追加、削除)
この記事ではGoogle Apps Script(GAS)における連想配列の定義、要素の追加と削除方法について紹介します。
連想配列とは
名前(キー)と値(バリュー)が1対1で対応するように定義づけられた配列のことです。
配列の各要素に対して、連番ではなく名前(キー)がついているため、コードの可読性が増したり、配列内における値の場所が不明でも名前(キー)で呼び出せるメリットがあります。
また、GASで連想配列を使う大きな意義としては、スプレッドシートとの連携にあります。連想配列と二次元配列と相互に変換することも可能なので、名前(キー)と値(バリュー)の対応を反映した形でスプレッドシートから読み込んだり書き込んだりすることが可能です。
連想配列の定義・初期化
{名前1:値1, 名前:値2, 名前3:値3, …}
配列には角括弧([])を使用しましたが、連想配列の場合は波括弧({})を使って定義します。また、各要素をカンマ(,)で分けて格納するのは一緒ですが、各要素ごとにピリオド(:)で名前(キー)と値(バリュー)を対応させて記述します。
let student = {'name', 'Bob', 'age':15 ,'score':85, 'rank':4};
下記図のように名前のついた複数の箱の中に値が入っているイメージのデータ構造で、この箱の名前を使って参照や代入を行えるので可読性が高いデータとなっています。
他の言語では「Dictionary型」、「HashMap(ハッシュ)」という名前で使われているので、親しみの多い方も多いようなオブジェクトかと思います。
慣れ親しんだ連想"配列"という呼称をここまで使ってきましたが、連想配列は正確にはオブジェクト型です。Array(配列)型のデータではないため、配列に使ってきた関数やメソッドは使いない点に注意してください。
console.log(Object.prototype.toString.call({'name':'Bob'})) //[object Object]
console.log(Object.prototype.toString.call(['namer','Bob'])) //[object Array]
誤用を避けるため本記事は、データ型指定が重要となる定義等の紹介時は「連想配列オブジェクト」という呼称を使います。
連想配列の参照・代入
連想配列の参照と代入には「ブラケット記法」と「ドット記法」という2つの手段があります。
ブラケット記法:連想配列オブジェクト['名前’] = 値
ドット記法:連想配列オブジェクト.名前 = 値
//ブラケット記法
let student = {};
student['name'] = 'Bob';
student['age'] = 15;
student['score'] = 85;
student['rank'] = 4;
console.log(student); //{ name: 'Bob', age: 15, score: 85, rank: 4 }
//ドット記法
let student = {};
student.name = 'Bob';
student.age = 15;
student.score = 85;
student.rank = 4;
console.log(student); //{ name: 'Bob', age: 15, score: 85, rank: 4 }
連想配列の要素追加・上書き
let student = {'name':'Bob', 'ase':15};
student['score'] = 85;
student.rank = 4;
console.log(student); //{ name: 'Bob', ase: 15, score: 85, rank: 4 }
また、同じ名前に違う値を定義すると、後から定義した値で上書きすることができます。
let student = {'name':'Bob', 'age':15 ,'score':85, 'rank':4};
console.log(student); // { name: 'Bob', age: 15, score: 85, rank: 4 }
student['score'] = 98;
student.rank = 1;
console.log(student); // { name: 'Bob', age: 15, score: 98, rank: 1 }
連想配列の要素の削除
delete 連想配列オブジェクト['名前’];
連想配列の要素を削除するには「delete」を使います。
let student = {'name': 'Bob', 'age':15 ,'score':85, 'rank':4};
console.log(student); //{ name: 'Bob', age: 15, score: 85, rank: 4 }
delete student['name'];
console.log(student); //{ age: 15, score: 85, rank: 4 }
deleteを使用後、名前と値どちらも要素が無くなっているのが確認できます。
連想配列から名前・値それぞれの配列を抽出
Object.keys(連想配列オブジェクト)
Object.values(連想配列オブジェクト)
Object.keys()、Object.values()という関数でオブジェクト内の名前群、値群をそれぞれの配列として参照できます。配列にしておいた方が特にスプレッドシート等と連携して処理する際などは便利です。
let student = {'name': 'Bob', 'age':15 ,'score':85, 'rank':4};
console.log(student); //{ name: 'Bob', age: 15, score: 85, rank: 4 r}
// delete student['name'];
// console.log(student); // { age: 15, score: 85, rank: 4 }
let [keys, values] = [Object.keys(student), Object.values(student)]
console.log(keys); // [ 'name', 'age', 'score', 'rank' ]
console.log(values); //[ 'Bob', 15, 85, 4 ]
まとめ
連想配列の定義と操作方法(要素の追加と削除)についてご紹介しました。
特にスプレッドシートと連携することが多いGASでは、配列操作を熟練させることで作業効率が大幅にアップします。ぜひ下記の記事もあわせて読んでみてください。