スキルアップを始める

【GAS】連想配列(オブジェクト)をループで回す

GAS(GoogleAppsScript)
メルマガ購読できます

簡単1ステップ!届いたメールの「フォローを確認」クリックでメルマガ登録!一緒にスキルアップを目指しましょう!

57人の購読者に加わりましょう

GASやJavaScript では、「for in」ループまたは「for of」ループを使用して連想配列(オブジェクト)を回すことができます。

連想配列とずっと呼んでいましたが、、、JavaScriptには連想配列は無いようです。

「for in」ループ

例えば、以下のようなコードの連想配列(オブジェクト)の値をA列に書き込む場合を考えてみます。

function AssociativeArray() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("シート1");

  const person = {
    id:101,
    name: "Yamada Taro",
    age: 30,
    city: "Tokyo"
  };
}

まずは「for…in」ループを使ってみます。「for…in」ループは、オブジェクトのプロパティ名を反復処理するために使用されます。

function AssociativeArray() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("シート1");

  const person = {
    id:101,
    name: "Yamada Taro",
    age: 30,
    city: "Tokyo"
  };

for (let key in person) {
  console.log(key + ': ' + person[key]);
}
}

情報	id: 101
情報	name: Yamada Taro
情報	age: 30
情報	city: Tokyo

あとは、

for (let key in person) {
  console.log(key + ': ' + person[key]);
  sheet.getRange(key.length, 1).setValue(person[key]);
}

変数keyでキーが、変数person[key]で値が取得できています。

例えば、A列にキー、B列に値を入れたいと思った場合は、下記のような感じで表示できます。

  let row = 1;
  let col = 1;
  for (let key in person) {
    console.log(key + ': ' + person[key]);
    sheet.getRange(row, col).setValue(key);
    sheet.getRange(row, col+1).setValue(person[key]);
    row++;
  }

key、person[key]でそれぞれの配列の中身が入りました。

「for…of」ループ

[rml_read_more]

「for…of」ループは、配列やオブジェクトの要素を反復処理するために使用されます。

  const person = {
    id: 101,
    name: "Yamada Taro",
    age: 30,
    city: "Tokyo"
  };

  for (let value of Object.values(person)) {
    console.log(value);
  }

情報	101
情報	Yamada Taro
情報	30
情報	Tokyo

値が取得できました。

TypeError: person is not iterable

for (let value of person)のような書き方で実行してみます。

  for (let value of person) {
    console.log(value);
  }

そうすると、下記のようなエラーが出ます。

エラー
TypeError: person is not iterable
AssociativeArray @ コード.gs:22

エラーの原因
for…of の右辺、 Promise.all や TypedArray.from などの引数として指定された値が反復可能オブジェクトではありません。反復可能なものは、Array、String、Map 等のような組み込み反復可能型や、ジェネレーターの結果、反復可能プロトコルを実装しているオブジェクトが成ることができます。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Errors/is_not_iterable

JavaScript では、 Object は反復可能プロトコルを実装していない限り反復処理できません。したがって、オブジェクトのプロパティを反復処理するために for…of を使用することはできません。

「for…of」ループでキーを取得する

例えば、Object.keysを使って、このように書くことで、キーを取得できます。

 for (let value of Object.keys(person)) {
    console.log(value);
  }

情報	id
情報	name
情報	age
情報	city

まとめ

「for…in」ループまたは「for…of」ループを使用して連想配列(オブジェクト)を回すことができます。

ループでセルに値を書き込みたいときなどに活用できます。

会員登録するとご利用できます。
Kindle Unlimited 会員は無料で購読できます
購読はこちら
Kindle Unlimited 会員は無料で購読できます
購読はこちら