1

在执行 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这里使用,因为当我这样做时,我最终会在数据库中得到一堆空值。我的问题实际上归结为两件事:在我的第一个示例中,在“如果”的情况下,当找不到值时,实际上发生了什么?是结果undefined吗?我可以在三元语法示例中使用什么来有效地编写相同的条件检查 - 直到值不存在时传递的内容?

这将是我的第一个示例的等效表达式吗?

staffProfile.hireDate = data_hireDate ? data_hireDate : undefined;
4

2 回答 2

2

1. “在我的第一个例子中,如果没有找到值,在“if”的情况下发生了什么?结果是undefined什么?”

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);

于 2018-10-13T00:41:19.700 回答
0

如果date_hireDate退出,它将被分配给 staffProfile.hireDate。下面的语法是你想要的。

staffProfile.hireDate = data_hireDate && data_hireDate

但是,这没有任何意义。date_hireDatebefore&&运算符应该是一个类似的条件date_hireDate === something

于 2018-10-13T00:40:59.133 回答