0

我有一个对象数组,我需要将其转换为二维数组,这样我就可以写入谷歌电子表格,其中每个属性都写入一个单元格。我有以下功能:

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

这是一种方法...

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已经是一个二维数组。我将假设这objects是一个像这样的一维对象数组。[{prop:value...},{...},{...}].

现在您要做的是从这些数据中生成 2 个数字索引。您需要确保 2D 数组的“第 1 列”是所有对象的相同属性。

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

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

然后你应该对所有对象进行循环。所以想法是,首先您将选择“名称”,然后遍历所有对象,将“名称”字段添加到每个对象的二维数组中。

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

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

于 2013-03-07T04:38:36.177 回答