Javascript 面临修改对象属性的问题

Javascript 面临修改对象属性的问题,javascript,angular,Javascript,Angular,由于一些混乱,在执行内部for循环时,我无法基于另一个对象操纵现有对象。我在我的项目中使用Angular,下面是代码: 对象A object_a = { "status1": { "volume": 100, "processed": 23, "progress": 77 }, "status2": { "volume&qu

由于一些混乱,在执行内部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”,如果是这种情况,那么它会将正确的标志分配给true。如果该数字是有效数字,则它将尝试从对象_b复制该数字,并将其覆盖到其正确属性中的对象_a。我希望这个解释有帮助

我想用object_b替换object_a的
status1
属性

我想要什么?

因此,对象_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”])

我试着这样做,但它用
status1
值替换了整个
object\u a
,删除了所有其他属性

我也试过了

this.object_a[“status1”]=this.object_b[“status1”]


但随后它抛出
无法分配给只读属性

有人能告诉我为什么它不工作吗?我就是无法让它工作。

试试这个:

const obj = {...object_a,...object_b};
object_a = obj;
console.log(object_a);
此处左侧对象将与现有属性重叠(如果未找到),然后将其作为属性连接

object_a = {...object_a, status1: object_b.status1}
当然,它们都必须至少是
const
类型,因此:

const object\u a
const object\u b

或者更简单:

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

看起来你只是想得太多了。我从未使用过
Object.assign
方法,只是直接重新分配

const object\u a={
“状态1”:{
“卷”:100,
“已处理”:23,
“进展”:77
},
“状态2”:{
“卷”:100,
“已处理”:23,
“进展”:77
},
“状态3”:{
“卷”:100,
“已处理”:23,
“进展”:77
},
“状态4”:{
“卷”:50,
“已处理”:2,
“进展”:3
}
}
让对象_b={
“状态1”:{
“卷”:300,
“已处理”:200,
“进展”:100
},
}
object_a.status1=object_b.status1;

console.log(object_a)
为什么要使用增强引号?我没有在代码中使用这些引号。只是我从word中复制了它作为插图。我将格式化我的问题。
无法分配到只读属性
缺少一些代码。我在控制台中运行您的代码,代码有效。也许你没有告诉我们什么<代码>此.object_a[“status1”]=此.object_b[“status1”]
正在按预期工作。@Hereticsmonkey and StPaulis我已更新了我的问题。请重新检查,您将发现我如何在for循环中使用这些对象的所有详细信息。感谢您的澄清。
object_a.status1={…object_b.status1}
我使用了这个,它确实有效。thanksi在使用simple equals(=)之前尝试过,但导致无法修改只读属性。将来,上传允许社区重现问题的最少代码量是有帮助的。很高兴你解决了。嗨,托克西。加入真的不是个好主意在我的情况下,它可能会给一些额外的数字,我不需要。因此,我接受了上述答案,因为它正是我想要的。谢谢