【问题标题】:How to break ForEach Loop in TypeScript如何在 TypeScript 中打破 ForEach 循环
【发布时间】:2019-01-15 18:15:33
【问题描述】:

我有以下代码,在某些情况下我无法打破循环。

 isVoteTally(): boolean {


 let count = false;
    this.tab.committee.ratings.forEach(element => {

      const _fo = this.isEmptyOrNull(element.ratings.finalOutcome.finaloutlook);
      const _foreign = this.isEmptyOrNull(element.ratings.finalOutcome.foreign);
      const _local = this.isEmptyOrNull(element.ratings.finalOutcome.local);
      const _tally = element.ratings.finalOutcome.voteTally.maj + element.ratings.finalOutcome.voteTally.dis;

      if (_fo == false && _foreign == false && _local == false) {
        if (_tally > 0) {
          **return count = false;**
        }
      } else {
        if (_tally < 0) {
          **return count = false;**
        }
      }
    });
    return count;
  }

在星标区域,我想打破代码并返回布尔值,但我现在无法做到。谁能帮帮我。

提前致谢。

【问题讨论】:

  • MDN 是关于 JavaScript 和可用类型/方法的绝佳资源。这是Array.ForEach 上的页面。它有一个部分专门介绍了如果需要中断可以使用的替代方案。 "提前终止可以通过以下方式完成:"
  • 请更新@Roberc 提供的最佳答案
  • 这能回答你的问题吗? Short circuit Array.forEach like calling break
  • 另外问题应该重命名为:How to break ForEach Loop by return a value in TypeScript。目前标题有点误导,因为您可以通过不返回任何内容来打破 forEach 循环。

标签: javascript angular typescript foreach break


【解决方案1】:

this.tab.committee.ratings.forEach 不是操作员。 Typescript 允许更多可读的代码。

使用 for 循环的样式如下:

for(let a of this.tab.committee.ratings) {
   if(something_wrong) break;
}

附言忘记 Angular 中的“使用 jQuery 编码”。它只是不起作用。

【讨论】:

【解决方案2】:

无法正常脱离forEach()

您也可以使用Array.every(),因为您希望在中断循环时返回false

如果你想返回true,那么你可以使用Array.some()

this.tab.committee.ratings.every(element => {

  const _fo = this.isEmptyOrNull(element.ratings.finalOutcome.finaloutlook);
  const _foreign = this.isEmptyOrNull(element.ratings.finalOutcome.foreign);
  const _local = this.isEmptyOrNull(element.ratings.finalOutcome.local);
  const _tally = element.ratings.finalOutcome.voteTally.maj + element.ratings.finalOutcome.voteTally.dis;

  if (_fo == false && _foreign == false && _local == false) {
    if (_tally > 0) {
      **return count = false;**
    }
  } else {
    if (_tally < 0) {
      **return count = false;**
    }
  }
});

【讨论】:

    【解决方案3】:

    你不能“break”,它甚至不会运行,因为从技术上讲,break 指令不在循环中。 解决方案? 只需使用普通的 for 循环。没有人会笑话你。

    【讨论】:

      【解决方案4】:

      我认为更好的解决方案是使用 for。 使用 for 你可以在找到它时返回一个值并打破循环。这是一个更清洁的解决方案

      for (element of this.tab.committee.ratings) {
      // and here you use your element, when you return a values it stops the cycle
      
      if (element === something){
       return element;
       }
      }
      

      【讨论】:

        【解决方案5】:

        只需执行return false;。会坏的。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 2018-02-08
        • 2010-10-07
        • 2014-03-24
        相关资源
        最近更新 更多