我尝试在每个循环中使用嵌套嵌套,它表示跳转目标不能越过函数边界.请告诉我如何在类型脚本中满足某些条件时,为每个循环打破嵌套.
groups =[object-A,object-B,object-C]
groups.forEach(function (group) {
// names also an array
group.names.forEach(function (name) {
if (name == 'SAM'){
break; //can not use break here it says jump target cannot cross function boundary
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mah*_*vcs 31
forEach接受一个函数并为数组中的每个元素运行它.你不能打破循环.如果要退出单次运行的函数,请使用return.
如果你想要打破循环,你必须使用for..of循环:
for(name of group.names){
if (name == 'SAM') {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
ForEach不支持中断,您应该使用return
groups =[object-A,object-B,object-C]
groups.forEach(function (group) {
// names also an array
group.names.forEach(function (name) {
if (name == 'SAM'){
return; //
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我没有足够的声誉来发表评论,但是当我尝试 Mahmoodvcs 的答案时,我收到编译错误“找不到名称“名称””。
解决方案是在循环之前声明变量,它不会像 forEach 那样自动实例化。简单的解决方案,但你永远不知道什么会绊倒你,所以希望它可以帮助别人。
这个片段是我能得到的最接近具有所需行为的 forEach 语法的片段:
for(let name of group.names){
if (name == 'SAM') {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我的情况略有不同。我在 forEach 循环中使用了 return,但我打算将 return 应用于包含函数,而不是 forEach。这不会返回错误,所以我很幸运我早些时候看过这篇文章,否则我可能一整天都在桌子上撞头。我的代码来自:
Object.keys(this.ddlForms).forEach(x => {
if (!(!this.ddlForms[x].filterControl.value || this.ddlForms[x].filterControl.value[0] == 'All' || this.ddlForms[x].filterControl.value.some(y => y == data[this.ddlForms[x].fieldName]))) {//does not meet any of these three conditions
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
到:
for(let x of Object.keys(this.ddlForms)) {
if (!(!this.ddlForms[x].filterControl.value || this.ddlForms[x].filterControl.value[0] == 'All' || this.ddlForms[x].filterControl.value.some(y => y == data[this.ddlForms[x].fieldName]))) {//does not meet any of these three conditions
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
forEach()尝试使用 for 循环和标记语句来代替,就像在 JavaScript 中一样:
outer: for (const i of [1,2,3]) {
for (const j of [4,5,6]) {
if (j === 6) break outer
console.log(i, j)
}
}
console.log('done')
Run Code Online (Sandbox Code Playgroud)
输出:
1 4
1 5
done
Run Code Online (Sandbox Code Playgroud)
您可以在TypeScript Playground上进行测试。
| 归档时间: |
|
| 查看次数: |
19334 次 |
| 最近记录: |