2016-08-03 128 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 “只关注它的第一个参数),但当然可以为你想要做的事情工作。你还没有告诉我们你究竟在做什么,所以...... –