如何在JavaScript中将undefined替换为null或将其视为false?

时间:2019-06-01 20:17:35

标签: javascript

所以我有这个小的生成器,显示的信息应该对应于数据库中填充的值,下面的示例是一个物理地址

this.setState({
   companyEmail: json.data.companyEmail,
   company: json.data.company,
   line1: json.data.line1,
   line2: json.data.line2,
   city: json.data.city,
   ... 
});

所以我可以用nullundefined""初始化这些值,这没关系,在获取请求时,这些空值的类型变成未定义。

Firebase不喜欢那样,对我来说它不会造成任何问题,我可以像这样检查真假来隐藏元素

{line1 && <span>{line1}<br /></span>}
{line2 && <span>{line2}<br /></span>}

好吧,我的意思是说直到我尝试更新数据库之前,它都起作用了,我得到了这个错误

  

错误:Reference.set失败:第一个参数包含未定义的   属性“ master.business.info.line2”

我想要做的是将undefined更改为null,因为当发送null时,从数据库中删除该子项,将其视为真实值。

在服务器端,这是常规的数据库更新

master.update({
   company: company,
   line1: line1,
   line2: line2,
   city: city,
   ... 
})
.then(() => {
   response.sendStatus(200);
}).catch(function (err) {
   console.log(err);
   response.sendStatus(204);
});

我可以相应地使用if语句和setState,但是这太多了。我需要获取请求,因为我需要这些值,这是一种编辑信息的表格。

使用""这样的空字符串也不好,它会显示在跨度,段落或其他任何内容内。

这不是重复的,在react.js上,我的目标是不要为未定义的值设置setState并将初始化值保留在构造函数上。

1 个答案:

答案 0 :(得分:1)

也许如果您这样更改setState:

const {companyEmail, company, line1, line2, city} = json.data;
this.setState({
   companyEmail,
   company,
   line1,
   line2,
   city,
   ... 
});

如果任何var没有值,它也不会添加到状态。

在这里,您可以在更新之前进行检查。尝试这样的事情:

const objUpdate = {
   company: company,
   line1: line1,
   line2: line2,
   city: city,
   ... 
};
const cloneObjUpdate = {...objUpdate};
Object.keys(objUpdate).forEach(key=>{
    if(!Boolean(cloneObjUpdate[key])) delete cloneObjUpdate[key];
});

master.update(cloneObjUpdate);

对于保留具有null值的对象,只需移除delete并设置一个null值:

const objUpdate = {
   company: company,
   line1: line1,
   line2: line2,
   city: city,
   ... 
};
const cloneObjUpdate = {...objUpdate};
Object.keys(objUpdate).forEach(key=>{
    if(!Boolean(cloneObjUpdate[key])) cloneObjUpdate[key] = null;
});