在Javascript(GAS)中使用枚举作为模板对象

时间:2013-10-30 00:49:28

标签: javascript object enums google-apps-script

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

Key“时间戳” Value 0

这是因为我通过变量名而不是无意义的数字对列索引进行了有意义的引用,但是目前这会导致大约60个API调用,这会使执行速度变慢。

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

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

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

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行代码来创建一个对象...有没有什么方法可以使用枚举中的索引作为模板从数据创建新对象在每一排?或者最后一点代码是实现这一目标的唯一方法吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以枚举使用for-in loop来获取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
}