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

本文探讨了在遍历Array过程中直接修改元素可能导致的迭代次数错误问题,并提供了一种有效的解决方案,通过创建临时数组来避免原数组长度变化引起的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:遍历一个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
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值