您可以在 Google 脚本中为 array.forEach 添加标签吗?
Can you add a label to an array.forEach in Google Script?
我想使用 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()
。如@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
时,循环停止并且res
是true
。
- 即使找到
QA
和PRODUCTION
,也不停止循环,继续循环。例如,如果没有找到 DEVELOPMENT
而找到 QA
,则 environment
和 res
分别是 QA
和 false
。
- 从你的脚本来看,我认为你可能需要这样的流程。
- 这次修改我使用了
switch
而不是if
,因为它比if
快了一点。这个测出来的结果是here。根据您的问题,我认为您可能需要低成本的脚本。所以我用了switch
.
参考:
如果我误解了你的意思,我很抱歉。
我想使用 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()
。如@Cooper 所述,没有方法可以在forEach()
处停止循环。在some()
的情况下,有一个停止循环的方法。
修改点:
- 这种情况使用
some()
时,返回true
即可停止循环。- 当找不到要搜索的字符串值时,
res
returnsfalse
. - 当找到要搜索的字符串值之一时,
res
returnstrue
.
- 当找不到要搜索的字符串值时,
修改后的脚本:
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
时,循环停止并且res
是true
。 - 即使找到
QA
和PRODUCTION
,也不停止循环,继续循环。例如,如果没有找到DEVELOPMENT
而找到QA
,则environment
和res
分别是QA
和false
。- 从你的脚本来看,我认为你可能需要这样的流程。
- 这次修改我使用了
switch
而不是if
,因为它比if
快了一点。这个测出来的结果是here。根据您的问题,我认为您可能需要低成本的脚本。所以我用了switch
.
参考:
如果我误解了你的意思,我很抱歉。