Comment casser/continuer les boucles imbriquées dans Coffeescript? Par exemple. J'ai quelque chose comme:
for cat in categories
for job in jobs
if condition
do(this)
## Iterate to the next cat in the first loop
Aussi, y a-t-il un moyen d'envelopper la seconde boucle entière comme condition à une autre fonction dans la première boucle? Par exemple.
for cat in categories
if conditionTerm == job for job in jobs
do(this)
## Iterate to the next cat in the first loop
do(that) ## Execute upon eliminating all possibilities in the second for loop,
## but don't if the 'if conditionTerm' was met
break
fonctionne exactement comme js:
for cat in categories
for job in jobs
if condition
do this
break ## Iterate to the next cat in the first loop
Votre deuxième cas n’est pas très clair, mais je suppose que vous voulez ceci:
for cat in categories
for job in jobs
do this
condition = job is 'something'
do that unless condition
Utilisez labels . Puisque CoffeeScript ne les prend pas en charge, vous devez modifier en tant que tel:
0 && dummy
`CAT: //`
for cat in categories
for job in jobs
if conditionTerm == job
do this
`continue CAT` ## Iterate to the next cat in the first loop
do that ## Execute upon eliminating all possibilities in the second for loop,
## but don't if the 'if conditionTerm' was met
La "rupture" de Coffescript ne coupe que la boucle immédiate et ne permet pas d'identifier une boucle externe pour la rupture (ennuyeux!). Ce hack suivant fonctionne dans certains cas pour rompre plusieurs boucles lorsqu'une condition est remplie:
ar1 = [1,2,3,4]
ar2 = [5,6,7,8]
for num1 in ar1
for num2 in ar2
console.log num1 + ' : ' + num2
if num2 == 6
breakLoop1 = true; break
break if breakLoop1
# Will print:
# 1 : 5
# 1 : 6
Utiliser une boucle anonyme avec return
do ->
for a in A
for b in B
for c in C
for d in D
for e in E
for f in F
for g in G
for h in H
for i in I
#DO SOMETHING
if (condition)
return true
Coffeescript n'aurait jamais de multiples déclarations brisées/continues, vous devez vous en tenir à des indicateurs laids et excessifs qui polluent votre code ou essayer de le remplacer par do
par un lambda et utiliser return
comme une rupture multiple.
Pour vérifier tous les éléments d'un tableau, peut-être que every
de lodash serait utile?
for cat in categories
if _.every jobs, conditionTerm
...