时
我有一个字段数组,用于设置结果对象。如果字段为空,则结果使用字段的现有值:
form: {
fields: [{
name: 'name',
value: 'Peter'
} , {
name: 'age',
value: 0
}]
}
form.fields.forEach(field => {
result[field.name] = field.value ||
original.value
}
我认为您可以看到问题:value: 0
永远不会在结果中设置为false。
对于此类案件,通常的解决方案是什么?当您需要将0
评估为true
?
您可以通过执行field.value !== undefined
:
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');
parseInt(val) === 0
===
检查类型(int)
或者您可以尝试
typeof field.value != 'undefined'
这将评估0为true,只有 undefined
为false
这样,您可以确定您的字段根本没有值,不仅是0
,还可以""
空字符串。
form.fields.forEach(field => {
if( typeof field.value !== "undefined" ) {
result[field.name] = field.value
} else {
result[field.name] = original.value;
}
}
编辑:
@felix Kling在评论中建议的,使用三元操作员较短版本:
form.fields.forEach(field => {
result[field.name] = typeof field.value !== "undefined" ? field.value : original.value;
}