web-dev-qa-db-fra.com

Casser/continuer imbriqué pour les boucles dans Coffeescript

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
26
Engin Erdogan

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
35
Ricardo Tomasi

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
20
matyr

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
11
tolmark

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
3
uri wald

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.

https://github.com/jashkenas/coffeescript/issues/4254

0
user619271

Pour vérifier tous les éléments d'un tableau, peut-être que every de lodash serait utile?

https://lodash.com/docs#every

for cat in categories
  if _.every jobs, conditionTerm
...
0
Markus