【问题标题】:Using an Enum as a Template Object in Javascript (GAS)在 Javascript (GAS) 中使用枚举作为模板对象
【发布时间】:2013-10-30 00:49:27
【问题描述】:

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

Key“时间戳” Value0

这样我就可以通过变量名而不是无意义的数字对列索引进行有意义的引用,但目前这会导致大约 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 行代码来创建一个对象...有什么方法可以使用枚举中的索引作为 模板 从数据中创建一个新对象在每一行?还是最后一段代码是完成此任务的唯一方法?

【问题讨论】:

    标签: javascript object enums google-apps-script


    【解决方案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
    }
    

    【讨论】:

    • 这太棒了...我只是知道有办法做到这一点!非常感谢,让我的代码很多更易于阅读和管理哈哈。更不用说更高效了:)
    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2023-03-14
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多