2017-03-01 20 views
-1

私はこのようなcondition1によってcondition2を実装している:条件は他の条件に依存します:条件条件

// condition1 comes from elsewhere 
let condition2; 
if(condition1){ 
    condition2='task.done' 
}else{ 
    condition2='! task.done' 
} 
mappedTasks=tasks.map((task,idx)=>{ 
    if(eval(condition2)){ 
     return /* stuff */ 
    }else{ 
     return /* other stuff */ 
    } 
}); 

しかし、機能evalは仕事をすることはできませんし、私のようなエラーメッセージが表示されます。

ReferenceError: task is not defined at eval

誰かがその条件条件を実装する最良の方法を知っているのだろうかと思います。


今のコードでは、と連携して動作します。

let condition2; 
if(condition1){ 
    condition2=task=>task.done; 
}else{ 
    condition2=task=>!task.done; 
} 
mappedTasks=tasks.map((task,idx)=>{ 
    if(condition2(task)){ 
     return /* stuff */ 
    }else{ 
     return /* other stuff */ 
    } 
}); 
+1

!task.done'を呼び出します。 'task'は' .map() 'コールバックのパラメータです。 – Pointy

+0

@Pointyそうです。 – user3405291

答えて

4

あなたは(すなわち、それを使用することはありません)それを避けることができるときevalを使用しないでください。

例えば、関数(同じ結果を満たすために他の方法がある)として第二の条件を定義することができます。ここ

:OPは `task.done`または`のいずれかを評価したいので

brso05 @
if (condition1){ 
    condition2 = function (task) { return task.done; } 
} else { 
    condition2 = function (task) { return !task.done; } 
} 
mappedTasks = tasks.map((task,idx)=>{ 
    if (condition2(task)) { 
     return /* stuff */ 
    } else { 
     return /* other stuff */ 
    } 
}); 
+0

あなたは正しいですが、OPはコールバックとして '.map()'に 'condition2'を直接渡すことができることに注意してください。 (たぶん、文脈にもよります) – Pointy

+1

@Point私は一般的な方向を伝えようとしていました(実際には他の方法があり、私が与えたものはおそらく最高ではないでしょう)。ポイント(y)それを出してくれてありがとう:D –

+0

確かに、それは明らかに正しい答えです:) – Pointy