对数组或对象通过循环改变其值产生的bug及解决方式
Posted shanxinxin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对数组或对象通过循环改变其值产生的bug及解决方式相关的知识,希望对你有一定的参考价值。
一个数组,
const bomtypeOptions = [
"通过审查",
"没有物料编码",
"数据库无对应数据",
"不匹配",
"优选级别",
"禁用料",
"临时料",
"不插件",
"有顶底层"
];
通过循环的方式改变其值,变成1234....
for(let i=0;i<bomtypeOptions.length;i++){
if(bomtypeOptions[i]=="通过审查"){
bomtypeOptions[i]="1"
}else if(bomtypeOptions[i]=="没有物料编码"){
bomtypeOptions[i]="2"
}else if(bomtypeOptions[i]=="数据库无对应数据"){
bomtypeOptions[i]="3"
}else if(bomtypeOptions[i]=="不匹配"){
bomtypeOptions[i]="4"
}else if(bomtypeOptions[i]=="优选级别"){
bomtypeOptions[i]="5"
}else if(bomtypeOptions[i]=="禁用料"){
bomtypeOptions[i]="6"
}else if(bomtypeOptions[i]=="临时料"){
bomtypeOptions[i]="7"
}else if(bomtypeOptions[i]=="不插件"){
bomtypeOptions[i]="8"
}else if(bomtypeOptions[i]=="有顶底层"){
bomtypeOptions[i]="9"
}
}
这样写会出问题,导致结果被改变,不要用原数组去赋值!!!;
正确解决方式应该把数组深拷贝一下(对象也是同理),用拷贝过的数组去循环,不要用原数组去赋值!!!
let choosetype = bomtypeOptions.concat();
for(let i=0;i<choosetype.length;i++){
if(choosetype[i]=="通过审查"){
choosetype[i]="1"
}else if(choosetype[i]=="没有物料编码"){
choosetype[i]="2"
}else if(choosetype[i]=="数据库无对应数据"){
choosetype[i]="3"
}else if(choosetype[i]=="不匹配"){
choosetype[i]="4"
}else if(choosetype[i]=="优选级别"){
choosetype[i]="5"
}else if(choosetype[i]=="禁用料"){
choosetype[i]="6"
}else if(choosetype[i]=="临时料"){
choosetype[i]="7"
}else if(choosetype[i]=="不插件"){
choosetype[i]="8"
}else if(choosetype[i]=="有顶底层"){
choosetype[i]="9"
}
}
bomtypeOptions=choosetype;
深拷贝方法:
数组:let choosetype = bomtypeOptions.concat();
对象:let checkdata = Object.assign({}, this.objInsteadData);
以上是关于对数组或对象通过循环改变其值产生的bug及解决方式的主要内容,如果未能解决你的问题,请参考以下文章