对数组或对象通过循环改变其值产生的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);标签:bomtypeOptions,else,choosetype,let,数组,通过审查,其值,bug 来源: https://www.cnblogs.com/shanxinxin/p/12888570.html