2016-08-03 2 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") 
} 

Что бы быть хорошим способом, чтобы избежать всех этих сослагательного наклонения?

Редактировать: Строки на самом деле не называются Val1 ... val13 (я использовал его в качестве примера, возможно, был запутан, извините).

+0

Что вы будете вставлять в 'valXX', если' foo ("valXX") 'false? Что-нибудь? –

+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

@ Хевар, который был бы моим предложением - он читает намного лучше, чем генерирует такие ценности, что делает ваш вопрос слишком чересчур я думаю –

+0

@Hevar: Это делает что-то отличное от того, что в вашем вопросе (и полагается на 'foo «только обращая внимание на его первый аргумент), но, конечно, вполне может работать на то, что вы пытаетесь сделать. Вы не сказали нам, что вы на самом деле пытаетесь сделать, поэтому ... –

Смежные вопросы