码迷,mamicode.com
首页 > 编程语言 > 详细

对数组或对象通过循环改变其值产生的bug及解决方式

时间:2020-05-14 15:54:53      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:个数   对象   instead   拷贝   cat   赋值   插件   问题   级别   

一个数组,

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及解决方式

标签:个数   对象   instead   拷贝   cat   赋值   插件   问题   级别   

原文地址:https://www.cnblogs.com/shanxinxin/p/12888570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!