首页 > 解决方案 > 面临修改对象属性的问题

问题描述

由于一些混乱,我无法在 for 循环中执行时基于另一个对象操作现有对象。我在我的项目中使用 Angular,这里是代码:

对象A

object_a = {

  "status1": {
      "volume": 100,
      "processed": 23,
      "progress": 77
  },

  "status2": {
      "volume": 100,
      "processed": 23,
      "progress": 77
  },

  "status3": {
      "volume": 100,
      "processed": 23,
      "progress": 77
  },

  "status4": {
      "volume": 50,
      "processed": 2,
      "progress": 3
  }

}

对象 B

object_b = {

  "status1": {
      "volume": 300,
      "processed": 200,
      "progress": 100
  },

}

这就是我使用它的方式:

    let count = 0;
    for(const keyLevel1 in this.object_a){
          let valueLevel1 = this.object_a[keyLevel1];
          let valueObj = {};
          isIncorrect[keyLevel1] = false;
          for(const keyLevel2 in valueLevel1){
            let valueLevel2 = this.object_a[keyLevel1][keyLevel2];
            if(Math.sign(valueLevel2) == -1 || valueLevel2 == "NA"){
              isIncorrect[keyLevel1] = true;
              if(this.object_b !== undefined && 
    Object.keys(this.object_b).length > 0){
    // here i am trying to overwrite                
    objAfterCopy = Object.assign({}, this.object_a, this.object_b[keyLevel1]);
              }
            }else{
              valueObj[keyLevel2] = valueLevel2;
              this.object_b[keyLevel1] = valueObj;
            }
          }
          if (!isIncorrect[keyLevel1]){
            this.object_a[keyLevel1] = state[Object.keys(state)[count]];
            count++;
          }
        }

上面的代码所做的是它检查在数字字段中分配的任何负数或“NA”,如果是这种情况,那么它将正确的标志分配为真。如果数字是有效数字,那么它将尝试从 object_b 复制该数字并将其覆盖到 object_a 的正确属性中。我希望这个解释有所帮助。

我想用 object_b 替换status1object_a 的属性。

我想要的是?

所以object_a的最终输出应该是:

object_a = {

  "status1": {
      "volume": 300,
      "processed": 200,
      "progress": 100
  },

  "status2": {
      "volume": 100,
      "processed": 23,
      "progress": 77
  },

  "status3": {
      "volume": 100,
      "processed": 23,
      "progress": 77
  },

  "status4": {
      "volume": 50,
      "processed": 2,
      "progress": 3
  }

}

我试过的

Object.assign({}, this.object_a["status1"], this.object_b["status1"]);

我尝试这样做,但随后它object_astatus1值替换了整个,删除了所有其他属性。

我也试过

this.object_a["status1"] = this.object_b["status1"]

但随后它抛出Cannot assign to read only property

有人可以告诉我为什么它不起作用吗?我只是无法让它工作。

标签: javascriptangular

解决方案


尝试这个:

object_a = {...object_a, status1: object_b.status1}

当然,它们都必须至少是const这样的:

const object_aconst object_b

甚至更简单:

object_a.status1 = {...object_b.status1}

推荐阅读