2017-03-01 117 views
-1

我實現了一個condition2取決於一個condition1這樣的:條件依賴於另一個條件:有條件的情況

// 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

@ brso05因爲OP要評估是'task.done'或' !回調函數中的task.done'; 'task'是'.map()'回調的參數。 – Pointy

+0

@積分是的。 – user3405291

回答

4

不要使用eval當你能避免它(即從來沒有使用它)。

這裏有個例子,你可以定義第二個條件作爲一個函數(還有其他的方式,以滿足相同的結果):

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可以直接將'condition2'作爲回調傳遞給'.map()'。 (也許;取決於上下文。) – Pointy

+1

@Pointy我更努力地給出一個大方向(還有其他的方法,我給的可能不是最好的)。感謝點(y)它:D –

+0

當然,這顯然是正確的答案:) – Pointy