2016-12-22 2 views
0

У меня есть массив полей, который я использую для установки объекта результата. Если поле пусто, то результат использует существующее значение поля:Как указать необязательное значение переменной, значение которого имеет значение boolean false?

form: { 
    fields: [{ 
    name: 'name', 
    value: 'Peter' 
    } , { 
    name: 'age', 
    value: 0 
    }] 
} 

form.fields.forEach(field => { 
    result[field.name] = field.value || 
    original.value 
} 

Я думаю, что вы можете увидеть проблему: value: 0 никогда не устанавливается в результате, потому что это оценивается как ложное.

Что такое обычное решение для таких случаев? Когда вам нужно 0 для оценки как true?

ответ

1

Вы можете проверить, если значение undefined делая field.value !== undefined:

form.fields.forEach(field => result[field.name] = field.value !== undefined ? field.value : original.value); 

Пример кода:

let zero = 0; 
 

 
console.log(zero !== undefined ? zero : 'other value');

+0

Значит, 'typeof' не нужно? – alex

+0

Да, вы можете проверить, является ли переменная 'undefined', выполнив:' x === undefined' –

1
parseInt(val) === 0 

в === проверяет тип (целое), а

или вы можете попробовать

typeof field.value != 'undefined' 

это оценит 0, как верно и только undefined как ложные

1

Таким образом, вы может быть уверен, что ваше поле имеет . Не имеет значения, а не только 0, но "" пустая строка.

form.fields.forEach(field => { 
    if(typeof field.value !== "undefined") { 
     result[field.name] = field.value 
    } else { 
     result[field.name] = original.value; 
    } 
} 

EDIT:

как предложено в комментариях @Felix Kling, сокращенный вариант с использованием троичной оператора:

form.fields.forEach(field => { 
    result[field.name] = typeof field.value !== "undefined" ? field.value : original.value; 
} 
+2

Или немного более кратким: 'результат [field.name] = TypeOf field.value == 'не определено'? field.value: original.value; '. –

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