Array中设置Element为null时可能会导致混乱

场景:遍历一个Array,清除其中不符合条件的element
初始方案:遍历Array,对不符合条件的element,设置Array中该element对应位置为 null(array[i]=null),遍历结束后再次遍历Array,对不为null的element执行正常操作。
初始方案问题:第二次遍历时,循环次数不等于(小于)应该循环的次数,即应该有10个不为null的element执行正常操作,但实际上只有5个element执行了正常操作
原始代码:
for  ( var  i  =   0 , stop; stop  =  stopList[i]; i ++ {
     
if (stop isn't legal) {
                stopList[i]=null;  //error
                continue;
       }
       // another
       for (var k = 0, marker; marker = markerList[k]; k++) {
              if (marker isn
't legal) {
                  markerList[k] 
= null;  //error
                  break;
               }

         }

    }
  
// has wrong iterator times
   for  ( var  i  =   0 , oldMarker; oldMarker  =  markerList[i]; i ++ {
        
if(oldMarker != null){
                
//do
          }

    }

            
  
// also has wrong iterator times
   for  ( var  i  =   0 , stop; stop  =  stopList[i]; i ++ {
        
if(stop != null){
                 
//do
         }

   }
 原因:未知,有时间再查
修改方案:
var  tempNewList  =  [];
label: 
for  ( var  i  =   0 , stop; stop  =  stopList[i]; i ++ ) ... {
      
if (stop isn't legal) {
                continue label;
       }
       // another
       for (var k = 0, marker; marker = markerList[k]; k++) {
              if (marker isn
't legal) ...{
                  markerList.splice(k,
1);
                  
continue label;
               }

         }

        tempNewList.push(stop);
    }
   
// has expectant iterator times
    for  ( var  i  =   0 , oldMarker; oldMarker  =  markerList[i]; i ++ ) ... {
         
//do
    }

            
   
// also has expectant iterator times
    for  ( var  i  =   0 , stop; stop  =  tempNewList[i]; i ++ ) ... {
        
//do
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值