どうも。つじけ(tsujikenzo)です。このシリーズでは「2次元配列をオブジェクトに変換する」という内容で全6回でお送りします。今日は第4回目です。今日はオブジェクトリテラルの基礎・後編です。オブジェクトリテラルについては最後なので頑張りましょう。
前回のおさらい
前回は、オブジェクトリテラルの書き方の基礎をお届けしました。
V8になってから便利な書き方ができるようになってスッキリしましたね。
今回は、オブジェクトリテラルの書き方の基礎を発展させて 「大量のオブジェクトを生成する方法」 についてまとめます。
オブジェクトを大量につくる?
最終的にはオブジェクトを大量に生成したい訳ですが、先に完成系を見た方がイメージが湧くかもしれません。
そして、最終系の形には2種類あります。
[配列型]
[
{id:'id',name:'name', age:'age'},
{id:'tg001',name:'辻健蔵', age:45},
{id:'tg002',name:'江藤大', age:35},
]
[オブジェクト型]
{
id = {id:’id’, name:'name',age = 'age'},
tg001 = {id:’tg001’, name:'辻健蔵', age:45},
tg002 = {id:’tg002’, name:'江藤大', age:35},
}
全体を角カッコ[]で囲んでいるか、波カッコ{}で囲んでいるか、各レコードが配列になっているか、キーバリュー方式になっているかの違いです。
そして2種類ありますが、果たしてどちらの方が最適なのか、現時点では答えが出せていません。
データを扱う人によってどちらが便利なのか変わるからです。その辺のモヤモヤは次回以降で明らかにしていきたいと思います。
今回は2種類の書き方をどちらもご紹介します。
元になるデータ
大量のオブジェクトを作るための元になるデータは、カンマ区切りのテキストデータでも構いません。
しかし、ここでは2次元配列で変数に格納してある状態とします。このような形です。
const values = [['id','name','age'],['tg001','辻健蔵',45],['tg002','江藤大',35]];
配列型の生成(for文)
関数定義(function myFunction(){…})は省略してますのでご了承ください。このような書き方ができるでしょう。
おさらいですが、V8の分割代入、スプレッド構文、オブジェクトの省略記法を使うとこのように書くことができますね。(スプレッド構文はやってませんね。便利なので覚えてください。)
オブジェクト型の生成(for文)
このような書き方ができるでしょう。配列型と比べて少しスッキリしています。
const values = [['id','name','age'],['tg001','辻健蔵',45],['tg002','江藤大',35]];
const object = {};
for (let i = 0; i < values.length; i++) {
object[values[i][0]] = {id: values[i][0], name: values[i][1], age: values[i][2]};
}
console.log(object)
//{id:{name:'name',age:'age'},tg001:{id:’tg001’, name:'辻健蔵',age:45},tg002:{id:’tg002’, name:'江藤大',age:35}}
クラスで書けないのか?
結論から言うとコンストラクタでプロパティキーに変数が使えないので無理だと思います。(書けるよ!という方は是非教えてください。。。クラスではプロパティキーをリテラルに書くしかないでは。。。)
まとめ
さて、今回はオブジェクトリテラルの最終回として大量のオブジェクトを生成する方法をお届けしました。
ただし、プロパティキーをあらかじめ記述しないといけないし、もうちょっと実践で使えるようなコーディングができそうです。
次回は、「2次元配列のオブジェクト変換(最終系)」 についてお届けしたいと思います。
このシリーズの目次
[GAS]2次元配列をオブジェクトに変換する‐1日目‐
[GAS]オブジェクトリテラルと仲良くなろう【前編】‐2日目‐
[GAS]オブジェクトリテラルと仲良くなろう【中編】‐3日目‐
[GAS]オブジェクトリテラルと仲良くなろう【後編】‐4日目‐
[GAS]2次元配列をオブジェクト化[最終系] 【前編】‐5日目‐
[GAS]2次元配列をオブジェクト化[最終系] 【後編】‐6日目‐