如何在TypeScript中中断ForEach循环

eagi6jfj  于 2022-12-24  发布在  TypeScript
关注(0)|答案(6)|浏览(426)

我有一个下面的代码,在某些情况下,我无法打破循环。

function 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;
}

在星号标记的区域,我想 break 代码并返回布尔值,但是我做不到。怎么做呢?

qc6wkl3g

qc6wkl3g1#

this.tab.committee.ratings.forEach不是运算符。
Typescript允许编写可读性更强的代码。
按如下方式使用for循环:

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

另外,忘了Angular中的“用jQuery编码”,它根本不起作用。

tnkciper

tnkciper2#

无法正常从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;**
    }
  }
});
niwlg2el

niwlg2el3#

你不能'break',它甚至不会运行,因为break指令在技术上不在循环中。解决方法?只要使用一个普通的for循环。没有人会嘲笑你。

vc9ivgsu

vc9ivgsu4#

我认为更好的解决方案是使用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;
 }
}
bwitn5fc

bwitn5fc5#

const blocks = document.querySelectorAll('.block');
var breakMe = false;

blocks.forEach((block, i) => {
    if(breakMe == false) {
        /*code that you want*/ 
        if(i < 2) {
            block.style.background = 'red';
        } else if(i != 4) {
            block.style.background = 'blue';
        } else if(i == 4) {
            breakMe = true;
            /*change breackMe to true if you want to breack forEach*/
        }
    }

})
<!DOCTYPE html>
  <html lang="en">
  <body>
    <div id="container">
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>      
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
    </div>
  </body>
  </html>
ujv3wf0j

ujv3wf0j6#

只要做return false;就行了它会坏的。

相关问题