Eu tenho um loop foreach angular e quero interromper o loop se eu corresponder a um valor. O código a seguir não funciona.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Como posso conseguir isso?
angularjs
javascript-framework
Menino gordinho
fonte
fonte
Respostas:
Não há como fazer isso. Consulte https://github.com/angular/angular.js/issues/263 . Dependendo do que você está fazendo, você pode usar um booleano para não entrar no corpo do loop. Algo como:
fonte
!keepGoing && return;
ao topo da função, menos código.O
angular.forEach
loop não pode quebrar em uma correspondência de condição.Meu conselho pessoal é usar um loop NATIVE FOR em vez de
angular.forEach
.O loop NATIVE FOR é cerca de 90% mais rápido que o outro para loops.
USE FOR loop em angular:
fonte
use algumas ou todas as instâncias do ForEach,
Exemplo para alguns:
Exemplo para cada:
Encontre mais informações
http://www.jsnoob.com/2013/11/26/how-to-break-the-foreach/
fonte
Use o método Array Some
existe retornará verdadeiro e você pode usá-lo como uma variável em sua função
Array Some Method - Javascript
fonte
angular.forEach()
é que eu tenho que dar suporte ao IE8, que não temArray.forEach()
... ouArray.some()
.Até onde eu sei, o Angular não fornece essa função. Você pode usar a
find()
função de sublinhado para isso (é basicamente um forEach que interrompe o loop quando a função retorna verdadeira).http://underscorejs.org/#find
fonte
Se você usar o jQuery (portanto, não o jqLite) em conjunto com o AngularJS, poderá iterar com $ .each - o que permite interromper e continuar com base na expressão do valor de retorno booleano.
JSFiddle:
http://jsfiddle.net/JEcD2/1/
Javascript:
Nota:
Embora o uso do jQuery não seja ruim, as funções nativas Array.some ou Array.every são recomendadas pelo MDN, pois você pode ler na documentação nativa do forEach :
Os exemplos a seguir são fornecidos pelo MDN:
Array.some:
Array.every:
fonte
Concretamente, você pode sair de um
forEach
loop e de qualquer lugar, lançar uma exceção.No entanto, é melhor se você usar outra biblioteca ou implementar sua própria função, uma
find
função nesse caso, para que seu código seja de alto nível.fonte
Tente isso como pausa;
fonte
Como as outras respostas afirmam, o Angular não fornece essa funcionalidade. No entanto, o jQuery faz isso e, se você carregou o jQuery e o Angular, pode usar
Consulte http://api.jquery.com/jquery.each/
fonte
Normalmente, não há como quebrar um loop "each" em javascript. O que geralmente pode ser feito é usar o método de "curto-circuito".
fonte
break
não é possível obter no forEach angular, precisamos modificar o forEach para fazer isso.fonte
break()
precisa ser definido ou se já faz parte do angular. Por favor, defina se não.Você pode usar isto:
fonte
fonte
fonte
Eu preferiria fazer isso de volta. Coloque a parte de loop na função privada e retorne quando desejar interromper o loop.
fonte
Sei que isso é antigo, mas um filtro de matriz pode fazer o que você precisa:
Você pode executar
arr.forEach
e outras funções da matriz.Sei que, se você pretende reduzir completamente as operações de loop, isso provavelmente não fará o que você deseja. Para isso você melhor usa
while
.fonte
Este exemplo funciona. Tente.
fonte
for
loop, seu caso de usoforeach
não precisa de umfor
provavelmenteUse Return para interromper o loop.
fonte
fonte
Eu usaria em
return
vez debreak
.Funciona como um encanto.
fonte
Apenas adicione $ index e faça o seguinte:
fonte