Проверьте наличие необязательного свойства в переменной модели мангуста

Итак, у меня есть структура схемы мангуста:

const execStatusScheema = new mongoose.Schema(...)

const notifyScheema = new mongoose.Schema({
  ...
  sms: {
    type: Boolean,
    required: true
  },
  smsStatus: {
    type: execStatusScheema
  },
  telegram: {
    type: Boolean,
    required: true
  },
  telegramStatus: {
    type: execStatusScheema
  },
  voice: {
    type: Boolean,
    required: true
  },
  voiceStatus: {
    type: execStatusScheema
  }
})

const Notify = mongoose.model('Notify', notifyScheema)
module.exports.Notify = Notify

как вы можете видеть в схеме уведомлений smsStatus, voiceStatus и telegramStatus не требуются. Если sms имеет значение false, свойство smsStatus не задано в моем коде, а для голоса и телеграммы такое же поведение. Я хочу отметить в уведомлении некоторые из этих свойств. Я делаю следующее:

    const uncomplitedNotifies = await Notify.find(...).select('smsStatus voiceStatus telegramStatus sms voice telegram') 
  uncomplitedNotifies.forEach(async notify => {
    console.info(notify)

    if ('telegramStatus' in notify) {
      console.info('123')
    }
...

Результат:

{ _id: 5ba07aaa1f9dbf732d6cbcdb,
  priority: 5,
  sms: true,
  telegram: false,
  voice: false,
  smsStatus: 
   { status: 'run',
     _id: 5ba07aaa1f9dbf732d6cbcdc,
     errMessage: 'Authentication failed',
     statusDate: '2018-9-18 12:10:19' } }
123

Хорошо, я нашел один, и все в порядке, но мой статус if верен, даже если у меня нет этого свойства в моем объекте. Я предполагаю, что он проверяет объект схемы, где он объявлен, но я хочу проверить свой «настоящий» объект, который я получил по запросу. Я тоже пробую этот проверочный случай, но результат тот же:

if (typeof something === "undefined") {
    alert("something is undefined");
}

Как я могу правильно проверить этот объект?

Итак, если вы наберете if (typeof notify.telegramStatus === 'undefined') console.info('yes'), сможете ли вы увидеть yes в консоли?

Ali Elkhateeb 19.09.2018 04:53

О, это работает. Я вижу «да», так что это не определено. Может, я ошибаюсь, пытаясь самостоятельно.

Morph 19.09.2018 05:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оператор in проверяет собственные свойства объекта и его цепочку прототипов. Неустановленные свойства находятся в цепочке прототипов вашего объекта, но не в собственных свойствах объекта:

  const hasTelegramStatus = 'telegramStatus' in document; // true
  const hasTelegramStatus = document.hasOwnProperty('telegramStatus') // false

Один из вариантов - преобразовать запрос в объект, выполнив document.toObject(), который удалит цепочку прототипов и вернет только собственные свойства.

Другие вопросы по теме