Как правильно написать проверку значений ключей объекта на пустоту, значение ключа может быть так же объектом?

Есть объект в data():
data: function() {
  return {
      car: {
        model:null,
        year:null,
        power:null,
        number:null,
        doc: {
          type: null,
          number: null,
          date:null,
        },
        card: {
          item: null,
          date: null,
        },
        card_our: false,
        vin: '',
        body_number: '',
        chassis_number:''
   },
 }
}

Есть метод, который прогоняет ключи нужного объекта и если какой-то из них равен пустому значению или null, не дает приступить к следующему шагу заполнения формы.
validateObject: function(obj,exclude = null) {
      obj = Object.assign({}, obj);
      for (let key in obj) {
        if (exclude && exclude.includes(key)) continue;
        if (obj[key] == null || obj[key] == '') return false;
      }
      return true;
    },


Что он делает:
1. Преобразовывает observer объект vue в обычный объект.
2. В exclude передается массив ключей, исключаемых из проверки.
3. По мере заполнения данных из формы, проверяет эти данные. Если каких-то нужных данных нет, возвращается false и к следующему шагу перейти нельзя.

Какие проблемы возникают:
Сейчас не удается проверять ключи, значением которых является объект, так как он уже является объектом observer, который снова надо преобразовать.

Можно, конечно, сделать проверку typeof, и если это объект - делать преобразование и проходиться еще по нему, но что если вложенность будет большая?

Я плохо представляю уже проход внутрь объекта по нескольким уровням (но в моей задаче их максимум 2), как это можно сделать? Нужно преобразовать сам вложенный объект и проверить еще ключи и у него. Получается нескончаемая пелена циклов в цикле?
  • Вопрос задан
  • 1023 просмотра
Решения вопроса 1
Когда в цикле функции вы понимаете, что столкнулись с объектом, то вам просто нужно вызвать ещё раз эту же функцию, но в качестве значения передать этот объект. Это называется рекурсия (https://learn.javascript.ru/recursion)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы