如何在类型脚本中的每个循环中嵌套/继续嵌套

gih*_*han 22 typescript

我尝试在每个循环中使用嵌套嵌套,它表示跳转目标不能越过函数边界.请告诉我如何在类型脚本中满足某些条件时,为每个循环打破嵌套.

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)


laz*_*per 8

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)

  • 确切地说,它会“继续”循环,但不会停止它 (8认同)
  • 它的作用不是像“继续”吗? (6认同)

小智 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)


a p*_*erd 5

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上进行测试。