Javascript 面临修改对象属性的问题
由于一些混乱,在执行内部for循环时,我无法基于另一个对象操纵现有对象。我在我的项目中使用Angular,下面是代码: 对象AJavascript 面临修改对象属性的问题,javascript,angular,Javascript,Angular,由于一些混乱,在执行内部for循环时,我无法基于另一个对象操纵现有对象。我在我的项目中使用Angular,下面是代码: 对象A object_a = { "status1": { "volume": 100, "processed": 23, "progress": 77 }, "status2": { "volume&qu
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(=)之前尝试过,但导致无法修改只读属性。将来,上传允许社区重现问题的最少代码量是有帮助的。很高兴你解决了。嗨,托克西。加入真的不是个好主意在我的情况下,它可能会给一些额外的数字,我不需要。因此,我接受了上述答案,因为它正是我想要的。谢谢