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
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
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
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
リターンで匿名ループを使用する
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は、複数の中断/継続ステートメントを持つことは決してありません。コードを汚染する醜くて過度のフラグに固執するか、ラムダでdo
に置き換え、複数の中断としてreturn
を使用する必要があります。
配列内のすべての要素をチェックするには、おそらくlodashのevery
が役に立ちますか?
for cat in categories
if _.every jobs, conditionTerm
...