Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 能否在Google脚本中向array.forEach添加标签?_Javascript_Loops_Google Apps Script_Anonymous Function - Fatal编程技术网

Javascript 能否在Google脚本中向array.forEach添加标签?

Javascript 能否在Google脚本中向array.forEach添加标签?,javascript,loops,google-apps-script,anonymous-function,Javascript,Loops,Google Apps Script,Anonymous Function,我想使用array.forEach()循环遍历数组中的所有元素,并根据元素的值中断或继续迭代。但是,Google脚本编译器说,我需要在每个break或continue上都有一个标签。这可以按照以下要点完成吗 for( i in traces ){ environment = null; traces[i].servers.forEach( function(server){ if( server.environment=="DEVELOPMENT" ) environ

我想使用
array.forEach(
)循环遍历数组中的所有元素,并根据元素的值中断或继续迭代。但是,Google脚本编译器说,我需要在每个
break
continue
上都有一个标签。这可以按照以下要点完成吗

for( i in traces ){
  environment = null;
  traces[i].servers.forEach( function(server){
    if( server.environment=="DEVELOPMENT" )
      environment = "DEVELOPMENT";
      break;  // got the earliest environment so no reason to keep on looking
    }
    if( server.environment=="QA" )
      environment = "QA";
      continue; // might get DEVELOPMENT next time
    }
    if( server.environment=="PRODUCTION" )
      environment = "PRODUCTION";
      continue; // might get DEVELOPMENT or QA next time
    }        
  });
  . . .
}

或者,我怎样才能把整个事情做得更好呢?

例如,这个变通方法怎么样?在这个变通方法中,它使用
some()
而不是
forEach()
。如前所述,没有方法在
forEach()
停止循环。在
some()的情况下
,有一种停止循环的方法

修改点:
  • 在这种情况下使用
    some()
    时,可以通过返回
    true
    来停止循环。
    • 当未找到用于搜索的字符串值时,
      res
      返回
      false
    • 当找到一个用于搜索的字符串值时,
      res
      返回
      true
修改脚本: 注:
  • 在这个修改后的脚本中,当发现
    开发
    时,循环停止,
    res
    true
  • 即使找到
    QA
    PRODUCTION
    时,循环也不会停止,循环也会继续。例如,如果在找到
    QA
    时未找到
    DEVELOPMENT
    ,则
    environment
    res
    分别是
    QA
    false
    • 根据你的剧本,我认为你可能需要这样的流动
  • 我使用了
    switch
    而不是
    if
    进行此修改,因为它比
    if
    快一点。测量结果是。从您的问题来看,我认为您可能需要成本较低的脚本。因此我使用了
    switch
参考:

如果我误解了您的要求,我很抱歉。

根据MDN,“除了抛出异常之外,没有其他方法可以停止或中断forEach()循环。如果您需要这种行为,forEach()方法是错误的工具。”
for( i in traces) {
  environment = null;
  var res = traces[i].servers.some(function(server) {
    switch (server.environment) {
      case "DEVELOPMENT":
        environment = "DEVELOPMENT";
        return true;
      case "QA":
        environment = "QA";
        break;
      case "PRODUCTION":
        environment = "PRODUCTION";
        break;
    }
  });

// do something

}