Выполняя 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;
1. "Что действительно происходит в моем первом примере, с случаем" если ", когда значение не найдено? Является ли результат 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);
если date_hireDate
выйдет, он будет присвоен staffProfile.hireDate. Синтаксис ниже - это то, что вы хотите.
staffProfile.hireDate = data_hireDate && data_hireDate
Однако это не имеет смысла. date_hireDate
перед &&
operator должно быть условием типа date_hireDate === something
.
staffProfile.hireDate: staffProfile.hireDate ?
Этот синтаксис не имеет смысла - двоеточие должно идти после знака вопроса в троице, а не до