Google apps script 在二维数组中存储对象特性

Google apps script 在二维数组中存储对象特性,google-apps-script,Google Apps Script,我有一个需要转换为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.hasOwnPro

我有一个需要转换为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],[…,…,…]
它将属性添加到每个数组元素。

这里有一种方法

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;
} 

在函数的第一部分

function objectsToArray(objects) {
  var outPutArray = createArray(objects.length, objects[0].length);
看起来您正在假设
对象
已经是一个2D数组。我将假设
对象
是这样一个1D数组。
[{prop:value…},{…},{…},{…}]

现在,您要做的是从该数据生成两个数字索引。您需要确保2D数组的“列1”对于所有对象都是相同的属性

所以你的第一个for循环应该在属性上。另外,保持一个索引,这样你就知道你在哪个数字属性上了

var j = 0;
for (var prop in objects[0]) {
然后你应该在所有的对象上做一个循环,首先你要选择“name”,然后遍历所有的对象,为每个对象的2D数组添加“name”字段

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

我认为您看到的主要问题是因为您没有使用数字索引。(
var j in objects[I]
:这将
j
定义为属性,例如“name”,而不是您期望的数字索引).

这正是我的问题,我没有考虑使用单独的计数器和反转for循环。非常好地工作,谢谢。请注意,这假设对象[1]与对象[0]具有相同的属性。如果每个对象都不同,那么我们会遇到更多麻烦。;-)这是我最初处理它的方式,但是如果属性发生了变化,代码就必须被修复,因为我可能不会永远维护这个项目,所以我需要一些更具动态性的东西。