0

作为表单提交的结果,我有一个包含大约 60 列的电子表格。目前我在 ScriptProperties(Google Apps 脚本)中存储“列 X 表示 Y”:

Key“时间戳” Value0

这样我就可以通过变量名而不是无意义的数字对列索引进行有意义的引用,但目前这会导致大约 60 个 API 调用,这会稍微减慢执行速度。

我想为整个电子表格创建一个列索引的枚举,因为它将保持静态,如下所示:

var formResults = {
  timestamp: 0,
  firstName: 1,
  lastName: 2,
  ...
  status: 60
}

这样我就不必引用脚本属性(通过调用 API 来减慢执行速度)。假设我在脚本开始时初始化了这个变量,我想做的下一件事是创建一个代表电子表格中的formResultsa 的新对象。rowIE:

for (allRows in sheet) {
  var rowData = new Object(formResults);
}

我希望我的目标能够实现——我想使用枚举的所有值enum来创建一个新的。object枚举可以是从每一行中的数据形成的新对象的模板。

我知道我可以遍历每一行,然后遍历电子表格的每一列并执行以下操作:

var row = row_in_spreadsheet; // row[0] = first column of the row for instance

var rowData = {
  timestamp: row[formResults.timestamp], // row[0]
  firstName: row[formResults.firstName], // row[1]
  lastName: row[formResults.lastName], // row[2]
  ...
  status: row[formResults.status] // row[60]
}

我宁愿没有 60 行代码来创建一个对象......有什么方法可以使用枚举中的索引作为模板从每一行中的数据创建一个新对象?还是最后一段代码是完成此任务的唯一方法?

4

1 回答 1

3

是的,您可以使用for-in 循环枚举对象的属性:enum

for (var i=0; i<allRows; i++) {
    var row = sheet[i]; // or whatever you use to iterate the rows

    var rowData = {};
    for (var key in formResults)
        rowData[key] = row[formResults[key]];

    // now do anything with your rowData
}
于 2013-10-30T01:01:21.363 回答