【问题标题】:For Loop with Changing Variable Names更改变量名称的 For 循环
【发布时间】:2020-08-21 19:18:22
【问题描述】:

我想创建一个 for 循环,用不同的变量名执行相同的操作。例如;在下面的代码中,我想循环代码 6 次,并且单词“civil”的每个实例都将根据数组中的值而变化。

civilSheet.activate();
  //grab values from column A and determine which rows the Hot List, Coordination Items, and Responsibilities information
  var civilData = civilSheet.getRange('A:A').getValues();
  for(var j=0;j<civilData.length;j++){
    if(civilData[j] == "~Hot List~"){
      var civilHot = j+3;
    } else if(civilData[j] == "~Coordination Items~"){
      var civilCoord = j+1;
    } else if(civilData[j] == "~Responsibilities~"){
      var civilResp = j+1;
    }
  }

目标类似于以下代码:

var variableNames = ["civil", "struct", "avl", "fpm", "electrical", "arch"];
  for(var i=0;i<variableNames.length;i++){
    var i+"Data" = i+"Sheet".getRange('A:A').getValues();
    for(var j=0;j<i+"Data".length;j++){
      if(i+"Data"[j] == "~Hot List~"){
        var i+"Hot" = j+3;
      } else if(i+"Data"[j] == "~Coordination Items~"){
        var i+"Coord" = j+1;
      } else if(i+"Data"[j] == "~Responsibilities~"){
        var i+"Resp" = j+1;
      }
    }
  }

【问题讨论】:

  • JavaScript 没有动态变量名。它确实具有计算属性,但这是另一回事。为了每个人的缘故,为什么变量名很重要?只有阅读代码的人才能看到它。运行您的代码的内容并不关心如何命名变量,只有变量保存的数据是相关的。
  • 我同意@Oleg - 动态变量名是个坏主意。你能在这里用字典吗?喜欢data["civil"][0]
  • @Mike67 - 嗯,似乎 OP 甚至不需要字典,我看不到 civilHot 等持有的数据取决于 i 的值。可能没有数据样本,它仍然是一个谜。
  • 最终目标是找到一种通过循环运行代码 6 次的方法,而不是使用不同的变量名复制和粘贴相同的代码 6 次。
  • @ChrisMMgr 代码缩短是一项很好的工作。但是创建变量不是。 ["civil", "struct", "avl", "fpm", "electrical", "arch"] 应该代表什么变量?它可以用一个普通的 for 循环来完成。你可能想多了。

标签: javascript for-loop google-apps-script google-sheets


【解决方案1】:

您不需要动态变量名称。您需要变量来动态引用不同的对象。您可以简单地添加另一个带有数组的 for 循环来重用相同的代码。

假设variableNamessheetNames

const sheetNames = ['civil', 'struct', 'avl', 'fpm', 'electrical', 'arch'];
const ss = SpreadsheetApp.getActive();
for (let si = 0; si < sheetNames.length; si++) {
  let thisSheet = ss.getSheetByName(sheetNames[si]);
  let thisData = thisSheet.getRange('A:A').getValues();
  for (let j = 0; j < thisData.length; j++) {
    if (thisData[j][0] == '~Hot List~') {
      let thisHot = j + 3;
    } else if (thisData[j][0] == '~Coordination Items~') {
      let thisCoord = j + 1;
    } else if (thisData[j][0] == '~Responsibilities~') {
      let thisResp = j + 1;
    }
  }
}

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 2014-04-15
    • 1970-01-01
    • 2019-01-31
    • 2010-11-06
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多