zoukankan      html  css  js  c++  java
  • 对数组或对象通过循环改变其值产生的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);
    不断学习.jpg
  • 相关阅读:
    AI人脸识别SDK接入 — 参数优化篇(虹软)
    虹软人脸识别ArcFace2.0 Android SDK使用教程
    虹软免费人脸识别SDK注册指南
    python3+arcface2.0 离线人脸识别 demo
    Android利用RecyclerView实现列表倒计时效果
    将博客搬至CSDN
    Retrofit动态设置支持JSON和XML格式转换工厂
    Android 简单统计文本文件字符数、单词数、行数Demo
    [雨]个人项目设计分析
    Android:随机生成算数四则运算简单demo(随机生成2~4组数字,进行加减乘除运算)
  • 原文地址:https://www.cnblogs.com/shanxinxin/p/12888570.html
Copyright © 2011-2022 走看看