在执行ETL将数据从Sybase数据库获取到MongoDB后端时,我可以这样做:
if (data.hire_date) staffProfile.hireDate = data.hire_date;
此方法可防止将空值填充到MongoDB中。如果data.hire_date
有一个值,那么它将被放入staffProfile.hireDate
中。但是,如果没有值,则实际上将其忽略。
现在,我想使用三元表达式创建相同的结果。像这样:
staffProfile.hireDate = data_hireDate ? data_hireDate : null;
但是,我不想在这里使用null
,因为这样做时,我最终在数据库中得到了一堆空值。我的问题实际上可以归结为两件事:在第一个示例中,如果没有找到值,在“ if”情况下实际上发生了什么?结果是undefined
吗?我可以在三元语法示例中使用什么来有效地编写相同的条件检查-直到值不存在时传递给什么?
这是否等同于我的第一个示例?
staffProfile.hireDate = data_hireDate ? data_hireDate : undefined;
答案 0 :(得分:2)
1。 “在我的第一个示例中,如果没有找到值,则在带有“ if”的情况下有效地发生了什么?结果是undefined
吗?” < / em>
是的,如果条件没有通过,并且没有创建object属性并且没有为其分配任何内容,则它将为undefined
:
const data = {};
const staffProfile = {};
if (data.hire_date) staffProfile.hireDate = data.hire_date;
console.log("data:", data);
console.log("staffProfile.hireDate:", staffProfile.hireDate);
2。 “在三元语法示例中,我可以使用什么来有效地编写相同的条件检查-直到值不存在时直接传递给什么?”
您可以通过以下方式获得完全相同的结果:
const data = {};
const staffProfile = {};
data.hire_date ? staffProfile.hireDate = data.hire_date : null;
console.log("data:", data);
console.log("staffProfile.hireDate:", staffProfile.hireDate);
不是这样(在这种情况下,它将变成null
)
const data = {};
const staffProfile = {};
staffProfile.hireDate = data.hire_date ? data.hire_date : null;
console.log("data:", data);
console.log("staffProfile.hireDate:", staffProfile.hireDate);
答案 1 :(得分:0)
如果date_hireDate
退出,它将被分配给staffProfile.hireDate。下面是您想要的语法。
staffProfile.hireDate = data_hireDate && data_hireDate
但是,这没有任何意义。 date_hireDate
之前的&&
应该是date_hireDate === something
之类的条件。