2016-06-02 4 views
-1

Можно ли добавить if состояние в return так, что в зависимости от логического значения flagЕсли внутри возвращение

он был возвращен в функции как

return { val1: 'aaa', val2: 'bbb'} 

или

return { val1: 'aaa', val2: 'bbb', val3:'ccc'}. 

Из курс Я могу сделать

if (flag) { 
    return { val1: 'aaa', val2: 'bbb'} 
} else { 
    return { val1: 'aaa', val2: 'bbb', val3:'ccc'}. 
} 

Однако мне это не нравится, поскольку слишком много свойств (не только val1, val2, как здесь, в примере, но и многих других), поэтому в этом случае будет продублирован огромный блок.

Любые идеи? Спасибо.

ответ

4

Это частая проблема.

Чистое решение, чтобы объявить объект:

var vals = { val1: 'aaa', val2: 'bbb'}; 
if (flag) vals.val3 = 'ccc'; 
return vals; 

Это также то, что имитирует внутреннюю логику.

1

Try:

var obj = { val1: 'aaa', val2: 'bbb'}; 

if (!flag) { 
    obj.val3 = 'ccc'; 
    //any other changes to the object you might want to add 
} 

return obj; 

Если у вас есть много свойств, которые могли бы попытаться extend вашего основного объекта с объектом, содержащим дополнительные свойства, например, с помощью jQuery.extend()

1

С подчеркиванием вы можете сделать что-то вроде этого:

return _.extend({ val1: 'aaa', val2: 'bbb' }, flag ? {} : { val3: 'ccc' });