检查角度7中的递归对象的属性

时间:2019-03-12 14:38:46

标签: angular typescript angular7

我在下面的堆栈闪电中有一个对象,我想检查键是否为日期。然后我要增加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 个答案:

答案 0 :(得分:3)

当发现其中一个属性是对象时,可以递归调用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
      }
    }
  }
}

有关演示,请参见this stackblitz