Estou procurando uma maneira de parar as iterações do _.each()
método underscore.js , mas não consigo encontrar a solução. O jQuery .each()
pode quebrar se você o fizer return false
.
Existe uma maneira de parar de sublinhar cada ()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
forEach
função nativa também não oferece esse recurso.each
um fechamento (na maioria dos idiomas), você deseja filtrar sua lista primeiro. Dessa forma, você não precisa se preocupar em romper com isso. De um modo geral, se você precisar interromper antecipadamente uma iteração, provavelmente há uma maneira diferente de fazê-lo.each
fechamento) é semelhante ao JavaScript.Array.every
emular o comportamento que deseja.Respostas:
Você não pode interromper o
each
método - ele simula oforEach
comportamento do método nativo , e o nativoforEach
não fornece para escapar do loop (exceto para lançar uma exceção).No entanto, toda a esperança não está perdida! Você pode usar o
Array.every
método :)Nesse link:
Em outras palavras, você poderia fazer algo complicado como este ( link para o JSFiddle ):
Isso alertará
1
através de3
, em seguida, "quebrar" fora do circuito.Você está usando underscore.js, assim você ficará contente em saber que ele não fornecer um
every
método que eles chamamevery
, mas como que apontam menciona, eles também fornecem um alias chamadoall
.fonte
_.every()
nem um_.all()
método para matrizes em sublinhado - portanto, atenha-se aArray.every()
.every
. Portanto, cuidado com a legibilidade._.each()
têm uma observação específica sobre o fato de que você não pode sair do loop e recomenda o uso_.find()
. http://underscorejs.org/#eachAtualizar:
_.find seria melhor, pois ele sai do loop quando o elemento é encontrado:
** Velho **
Se você deseja interromper condicionalmente um loop, use _.filter api em vez de _.each. Aqui está um trecho de código
fonte
_.find
faz exatamente o que é solicitado: itere na lista até o retorno da chamadatrue
.Você pode dar uma olhada em
_.some
vez de_.each
._.some
pára de percorrer a lista quando um predicado for verdadeiro. Os resultados podem ser armazenados em uma variável externa.Veja http://underscorejs.org/#some
fonte
fonte
Talvez você queira Underscore's any () ou find (), que interromperão o processamento quando uma condição for atendida.
fonte
Como as outras respostas, é impossível. Aqui está o comentário sobre o disjuntor na questão de sublinhado de sublinhado # 21
fonte
Você não pode quebrar um
forEach
sublinhado, pois emula o comportamento nativo do EcmaScript 5.fonte
Acredito que se sua matriz era realmente um objeto, você poderia retornar usando um objeto vazio.
fonte
http://underscorejs.org/#each
fonte
Atualizar:
Você pode realmente "quebrar" lançando um erro dentro e capturando-o do lado de fora: algo como isto:
Obviamente, isso tem algumas implicações em relação a outras exceções que seu código aciona no loop, portanto, use com cuidado!
fonte
trabalhou no meu caso
fonte