美文网首页
splice()方法在for循环中可能会遇到的坑

splice()方法在for循环中可能会遇到的坑

作者: 淡然7698 | 来源:发表于2018-04-22 01:05 被阅读148次
    var arr = [1, 2, 3, 4, 5];     //初始化数字集合  
    var remove_number = 3;    //要被删除的数字  
      
    //遍历数组  
    for(var i=0; i<arr.length; i++){  
        if(arr[i] === remove_number){   //如果找到要被删除的数字所在的数组下标  
            var num = arr.splice( i, 1 );   //从i位置开始删除1个数字  
            console.log("成功删除 "+num);    //输出被删除的数字  
        }  
        else{  
            console.log(arr[i]+" 未被删除");    //如果i下标的数组元素不是需要被删除的数字,就输出数字  
        }  
    } 
    

    因为splice 是直接操作并修改数组的,所以当找到数字3时在循环中的 i 下标是2,而当删除数字3后,数组下标 i 位置中保存的数字变为了数字4,然后到了下一个循环 i 下标为3时,数组下标 i 位置中保存的数字是5,所以跳过了数字4,于是调试信息中没有数字4.。。。

    一个解决方法 从最后往前循环

    for (var i = arr.length - 1; i >= 0; i--) {
           if(arr[i] === remove_number){   //如果找到要被删除的数字所在的数组下标  
            var num = arr.splice( i, 1 );   //从i位置开始删除1个数字  
            console.log("成功删除 "+num);    //输出被删除的数字  
        }  
        else{  
            console.log(arr[i]+" 未被删除");    //如果i下标的数组元素不是需要被删除的数字,就输出数字  
        }  
     }
    

    相关文章

      网友评论

          本文标题:splice()方法在for循环中可能会遇到的坑

          本文链接:https://www.haomeiwen.com/subject/pcoakftx.html