我有一个字段数组,用于设置结果对象。如果该字段为空,则结果使用该字段的现有值:
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
时?
答案 0 :(得分:1)
parseInt(val) === 0
===
也检查类型(int)
或者你可以尝试
typeof field.value != 'undefined'
这会将0评为true,仅将undefined
评为false
答案 1 :(得分:1)
通过这种方式,您可以确保您的字段完全没有价值,不仅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;
}
答案 2 :(得分: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');