0

2D配列に変換する必要のあるオブジェクトの配列があるので、各プロパティがセルに書き込まれるGoogleスプレッドシートに書き込むことができます。私は以下の機能を持っています:

function objectsToArray(objects) {
  var outPutArray = createArray(objects.length, objects[0].length);
  for (var i in objects) {
    for (var j in objects[i]) {
      if (objects.hasOwnProperty(i)) {
        outPutArray[i][j] = objects[i][j];
      }
    }
  }

  return outPutArray;
}

オブジェクトの例:

object {
  name: John
  phone: 555-5555
  email: john@john.com
}

問題は、プロパティ値を配列要素に配置する代わりに(outputArrayは[[John, 555-5555, john@john.com],[..., ..., ...]]、各配列要素にプロパティを追加するように見えるはずです。

4

2 に答える 2

1

これが1つの方法です...

function myFunction() {
  var objects = {};
  objects[0] = {"name": "John", "phone": "555-5555", "email": "john@john.com"};
  objects[1] = {"name": "Mary", "phone": "444-4444", "email": "mary@mary.com"};
  var outputArrary = objectsToArray(objects);
  Logger.log(outputArrary);
}

function objectsToArray(objects) {
  var outputArray = [];
  for (var i in objects) 
    outputArray.push([objects[i].name, objects[i].phone, objects[i].email]);
  return outputArray;
} 
于 2013-03-07T04:24:51.657 に答える
1

関数の最初の部分では、

function objectsToArray(objects) {
  var outPutArray = createArray(objects.length, objects[0].length);

objectsはすでに2D配列であると想定しているようです。objectsこれは、このようなオブジェクトの 1D 配列であると仮定します。[{prop:value...},{...},{...}].

ここでやりたいことは、このデータから 2 つの数値インデックスを生成することです。2D 配列の「列 1」がすべてのオブジェクトで同じプロパティであることを確認する必要があります。

したがって、最初の for ループはプロパティを対象とする必要があります。また、インデックスを保持して、現在の数値プロパティがわかるようにします。

var j = 0;
for (var prop in objects[0]) {

次に、すべてのオブジェクトに対してループを実行する必要があります。したがって、最初に「名前」を選択し、次にすべてのオブジェクトを調べて、各オブジェクトの 2D 配列に「名前」フィールドを追加するという考え方です。

  for (var i in objects) {
    outPutArray[i][j] = objects[i][prop];
  }
  j++;
}

あなたが見ていた主な問題は、数値インデックスを使用していなかったためだと思います。( var j in objects[i]: これはj、期待どおりの数値インデックスではなく、「名前」などのプロパティとして定義されます)。

于 2013-03-07T04:38:36.177 に答える