2016-05-06 12 views
2

Coffeescriptを使用して、2つの変数のグラフプロットにfillColorを設定するための条件を設定しようとしています。 lastVisibilityおよびcurr_visibility。私の構文では何かが正しくありません。任意の提案for文でのCoffeescript構文の問題

for set in datasets 
      line.push 
       data: set, 
       lines: 
        show: true 
        fill: true 
        opacity: 0.7 
        fillColor: if lastVisibilty == 0 & curr_visibility == 0 
         then "#C90E30" 
        else lastVisibilty == 0 & curr_visibility == 1 
         then "#439C32" 
        else lastVisibilty == 1 & curr_visibility == 0 
         then "#C90E30" 
        else 
         "#439C32" 

答えて

2

問題の多くがここにあります

  1. は、あなたがそのようなa = if b then c else dとしてワンライナーを使用しているとき、あなたはの複数行の形式を使用している場合のみ、thenを使用しますifthenを使用しないでください。
  2. 複数のelseブランチがあります。else ifです。
  3. &&&は異なるものですが、&はビット単位の演算子です。&&はあなたが探している論理積です。
  4. あなたは、あなたの押し込みに非常に注意し、一貫している必要があります。あなたのコードにそれらの調整を適用する

あなたが得る:

for set in datasets 
    line.push 
     data: set, 
     lines: 
      show: true 
      fill: true 
      opacity: 0.7 
      fillColor: if lastVisibilty == 0 && curr_visibility == 0 
       "#C90E30" 
      else if lastVisibilty == 0 && curr_visibility == 1 
       "#439C32" 
      else if lastVisibilty == 1 && curr_visibility == 0 
       "#C90E30" 
      else 
       "#439C32" 

しかし、あなたのループ内の条件付きロジックがsetに依存しない(すなわち、ループ不変である)ので、あなたはそれを考慮する必要があります。

fillColor = if lastVisibilty == 0 && curr_visibility == 0 
     "#C90E30" 
    else if lastVisibilty == 0 && curr_visibility == 1 
     "#439C32" 
    else if lastVisibilty == 1 && curr_visibility == 0 
     "#C90E30" 
    else 
     "#439C32" 
for set in datasets 
    line.push 
     data: set, 
     lines: 
      show: true 
      fill: true 
      opacity: 0.7 
      fillColor: fillColor 

またはそれ以上は、さらにコードを明確にするために、ループの外のすべての不変のものをプッシュします

または、forループ式であることから、あなたが言うことができる:

fillColor = if lastVisibilty == 0 && curr_visibility == 0 
     "#C90E30" 
    else if lastVisibilty == 0 && curr_visibility == 1 
     "#439C32" 
    else if lastVisibilty == 1 && curr_visibility == 0 
     "#C90E30" 
    else 
     "#439C32" 
lines = 
    show: true 
    fill: true 
    opacity: 0.7 
    fillColor: fillColor 
line = ({ data: set, lines: line } for set in datasets) 

lineはもちろん、あなたのループの前に空であると仮定すると、 lineにループのデータを追加する

line = line.concat({data: set, lines: line } for set in datasets) 

:そうでない場合、あなたはArray.prototype.concatを使用することができます。

+1

私の元のforループの外側にfillColor:if条件文を追加しました。しかし、私は現在、条件の1つに対してcurr_visibility varによって引き起こされた新しい問題を抱えています。私はそれを別の質問で掲示します。 – jcbridwe