Проверка свойств рекурсивного объекта в угловых 7 - PullRequest
2 голосов
/ 12 марта 2019

У меня есть объект, подобный приведенному ниже stackblitz, и я хочу проверить, является ли ключ Date или нет.А потом я добавляю 3 дня к этой дате.Я делаю это для нерекурсивного объекта идеально.Но, когда объект рекурсивный, я не мог этого сделать.Как мне этого добиться? Производительность важна для меня, потому что в моем сценарии реальной жизни мои объекты очень большие и сложные.

Stackblitz

  myObject = {
    aProperty: {
      aSetting1: 1,
      aSetting2: new Date(),
      aSetting3: 3,
      aSetting4: 4,
      aSetting5: 5
    },
    bProperty: {
      bSetting1: {
        bPropertySubSetting: new Date()
      },
      bSetting2: "bString"
    },
    cProperty: {
      cSetting: new Date()
    },
    dProperty: new Date()
  }


  convertButtonClick() {
    this.convert(this.myObject);
    console.log(this.myObject);
  }

  convert(obj) {
    for (var property in obj) {
      if (obj.hasOwnProperty(property)) {
        if (obj[property] instanceof Date) {
          obj[property].setDate(obj[property].getDate() + 3);
        }
      }
    }
  }

1 Ответ

3 голосов
/ 12 марта 2019

Вы можете вызвать convert рекурсивно, когда обнаружите, что одно из свойств является объектом:

convert(obj) {
  for (let property in obj) {
    if (obj.hasOwnProperty(property)) {
      if (obj[property] instanceof Date) {
        obj[property].setDate(obj[property].getDate() + 3);
      } else if (obj[property] instanceof Object) {
        this.convert(obj[property]);  // Recursive call
      }
    }
  }
}

См. этот стек для демонстрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...