2016-08-03 134 views
0

這只是感覺低效和醜陋:替代多個if語句?

if(foo("val1")) { 
    let val1 = foo("val1") 
} 

if(foo("val2")) { 
    let val2 = foo("val2") 
} 

/* more IFs */ 

if(foo("val13")) { 
    let val13 = foo("val13") 
} 

什麼是避免所有這些IFS的好辦法?

編輯:字符串實際上並沒有被稱爲Val1 ... val13(我用它作爲例子,可能是令人困惑,對不起)。

+0

如果'foo(「valXX」)'爲false,那麼你會在'valXX'中放入什麼?什麼? –

+0

注意:'let'是塊範圍的,所以你可能想聲明'if'外的那些,除非你真的只在'if'塊中使用它們。 –

+2

@ Hevar我在這裏沒有看到任何與React相關的代碼。 –

回答

3

在這種情況下,我可能會使用陣列和循環:

let vals = []; 
for (let i = 1; i <= 13; ++i) { 
    let name = "val" + i; 
    if (foo(name)) { 
     vals[i - 1] = foo(name); 
    } 
} 

請注意,如果您分配給之後的索引不分配到一個較早的一個,你結束了一個稀疏陣列。例如: -

let a = []; 
a[2] = "two"; 

... a具有在所有沒有條目0或1 。 (訪問它們會得到值undefined,但是。)

+0

因此,類似'const values = ['val1','val2','val3']。map(foo)'的東西也會解決嗎? – Hevar

+0

@Hevar,這將是我的建議 - 它讀取比產生這樣的值要好得多,這會讓你的問題有點過於理智我認爲 –

+0

@Hevar:它做了與你的問題不同的東西(並且依賴於'foo 「只關注它的第一個參數),但當然可以爲你想要做的事情工作。你還沒有告訴我們你究竟在做什麼,所以...... –