web-dev-qa-db-fra.com

Comment casser une boucle ForEach dans TypeScript

J'ai le code ci-dessous, sur lequel je suis incapable de casser la boucle sous certaines conditions.

 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;

}

Sur la zone marquée par une étoile, je veux interrompre le code et renvoyer la valeur booléenne, mais je suis incapable de le faire pour le moment. Quelqu'un peut-il m'aider?.

Merci d'avance.

12
Arka

Il n'est pas possible de rompre normalement de forEach().

Sinon, vous pouvez utiliser Array.every () parce que vous souhaitez renvoyer false tout en coupant la boucle.

Si vous voulez renvoyer true, vous pouvez utiliser 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
Amit Chigadani

this.tab.committee.ratings.forEach n'est pas l'opérateur. TypeScript permet un code beaucoup plus lisible.

Utilisez for en boucle de la manière suivante:

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

p.s. oubliez "coder comme avec jQuery" dans Angular. Ça ne marche pas.

23
Roberc

Ceci est pour Lodash

forEach(this.diningService.menus, (m: any) => {
      this.category = find(m.categories, (c: any) => {
        return c.id === Number(categoryId);
      });
      if (this.category) { return false; }
    });
0
Sampath