编写三元表达式以匹配JavaScript中特定的if / else

时间:2018-10-13 00:30:12

标签: javascript ternary-operator

在执行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;

2 个答案:

答案 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之类的条件。