Pausa angolare JS per ciascuno


256

Ho un ciclo foreach angolare e voglio interrompere il loop se incontro un valore. Il seguente codice non funziona.

angular.forEach([0,1,2], function(count){
  if(count == 1){
    break;
  }
});

Come posso ottenerlo?


1
Non capisco perché non trovi semplicemente il valore invece di andare in un ciclo. Forse l'esempio che hai dato non sta raccontando l'intera storia, ma preferirei fare ciò che @Aman ha detto di seguito. Perché andare nel loop come menzionato di seguito ed eseguire un controllo ogni volta che some () fa esattamente questo in un modo più elegante. Ricorda che se tratti javascript come un linguaggio funzionale, non dovrebbe esserci alcun motivo nell'usarli per le strutture di controllo per / while / break. Ecco perché esistono foreach, find, alcuni, ecc.
Adrian Rodriguez,

Risposte:


264

Non c'è modo di farlo. Vedi https://github.com/angular/angular.js/issues/263 . A seconda di cosa stai facendo, puoi usare un booleano per non entrare nel corpo del loop. Qualcosa di simile a:

var keepGoing = true;
angular.forEach([0,1,2], function(count){
  if(keepGoing) {
    if(count == 1){
      keepGoing = false;
    }
  }
});

45
Preferirei solo aggiungere a !keepGoing && return;all'inizio della funzione, meno codice.
Andrew Joslin,

46
Queste non sono le migliori pratiche, qui angolari per ogni ciclo non si rompono mai, E non c'è nulla che rompa angolare. Il loop nativo è circa il 90% più veloce di angular.forOach. Quindi è meglio usare nativo per il ciclo quando si desidera interrompere la corrispondenza delle condizioni. Grazie
Nishchit Dhanani il

xcatly dove mi sono bloccato ... e questo mi ha aiutato ... grazie mille ... Ad ogni modo, vorrei sapere il motivo per cui ogni loop è infrangibile. Se esiste
Saurabh Tiwari,

Questa non dovrebbe essere la risposta accettata perché non interrompe il ciclo forEach. È semplicemente un modo per non eseguire tutta la logica all'interno del loop.
Nebulosar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.