web-dev-qa-db-ja.com

Coffeescriptのネストされたforループの解除/継続

Coffeescriptでネストされたループを中断/継続するにはどうすればよいですか?例えば。私のようなものがあります:

for cat in categories
  for job in jobs
    if condition
      do(this)
      ## Iterate to the next cat in the first loop

また、最初のループ内の別の関数の条件付きとして、2番目のループ全体をラップする方法はありますか?例えば。

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はjsと同じように機能します。

for cat in categories
  for job in jobs
    if condition
      do this
      break ## Iterate to the next cat in the first loop

2番目のケースはあまり明確ではありませんが、これが必要だと思います。

for cat in categories
    for job in jobs
      do this
      condition = job is 'something'
    do that unless condition
35
Ricardo Tomasi

labels を使用します。 CoffeeScriptはそれらをサポートしていないため、次のようにハッキングする必要があります。

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

Coffescriptの「break」は、即時ループのみを中断し、破損の外側のループを特定する方法はありません(迷惑です!)。次のハックは、条件が満たされたときに複数のループから抜け出すためのいくつかのインスタンスで機能します。

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

リターンで匿名ループを使用する

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は、複数の中断/継続ステートメントを持つことは決してありません。コードを汚染する醜くて過度のフラグに固執するか、ラムダでdoに置き換え、複数の中断としてreturnを使用する必要があります。

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

0
user619271

配列内のすべての要素をチェックするには、おそらくlodashのeveryが役に立ちますか?

https://lodash.com/docs#every

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