您可以在 Google 脚本中为 array.forEach 添加标签吗?

Can you add a label to an array.forEach in Google Script?

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

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()。如@Cooper 所述,没有方法可以在forEach() 处停止循环。在some()的情况下,有一个停止循环的方法。

修改点:

  • 这种情况使用some()时,返回true即可停止循环。
    • 当找不到要搜索的字符串值时,res returns false.
    • 当找到要搜索的字符串值之一时,res returns true.

修改后的脚本:

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

}

注:

  • 在这个修改后的脚本中,当找到DEVELOPMENT时,循环停止并且restrue
  • 即使找到QAPRODUCTION,也不停止循环,继续循环。例如,如果没有找到 DEVELOPMENT 而找到 QA,则 environmentres 分别是 QAfalse
    • 从你的脚本来看,我认为你可能需要这样的流程。
  • 这次修改我使用了switch而不是if,因为它比if快了一点。这个测出来的结果是here。根据您的问题,我认为您可能需要低成本的脚本。所以我用了switch.

参考:

如果我误解了你的意思,我很抱歉。