如何在 TypeScript 中打破 ForEach 循环
Posted
技术标签:
【中文标题】如何在 TypeScript 中打破 ForEach 循环【英文标题】:How to break ForEach Loop in TypeScript 【发布时间】: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 循环。 【参考方案1】:this.tab.committee.ratings.forEach 不是操作员。 Typescript 允许更多可读的代码。
使用 for 循环的样式如下:
for(let a of this.tab.committee.ratings)
if(something_wrong) break;
附言忘记 Angular 中的“使用 jQuery 编码”。它只是不起作用。
【讨论】:
我找不到of
的文档。
@Mangesh 这个语法不是 Angular 特定的。这是新的 ECMAScript 标准。你可以在这里阅读它developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
对于大型数组,这更高效,因为它会在第一次匹配时中断,并且不需要遍历每个元素。
@Mangesh: typescriptlang.org/docs/handbook/…
不错!更适合我的口味.forEach
。即使那不是直接回答问题。【参考方案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;
。会坏的。
【讨论】:
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… "除了抛出异常之外,没有其他方法可以停止或中断 forEach() 循环。如果您需要这样的行为,那么 forEach() 方法是错误的工具。"以上是关于如何在 TypeScript 中打破 ForEach 循环的主要内容,如果未能解决你的问题,请参考以下文章