zoukankan      html  css  js  c++  java
  • JavaScript的splice()方法在for循环中使用可能会遇到的坑!!!

    在我们日常敲代码的时候,常常会用到splice()方法来删除数组中的元素(就是以截取的方式),因为它会直接对数组进行修改。

    在使用splice之前,必备条件是,要先有一个数组。

    var arr =  new Array(1,2,3,4,5);  // 初始化一个数组
    var deleteNumber = 3; // 要删除的元素
    
    // 遍历数组
    for(var i=0; i < arr.length; i++){
      if(arr[i] === deleteNumber){ // 如果和要删除的元素相等
          var num = arr.splice(i,1);
        console.log("成功删除" + num)
      } else {
       console.log(arr[i] + "未被删除");
      }
    }
    

      

     

    可以看到,3已经被成功删除,但是4跑哪去了呢???

    前面说过,splice 是直接操作并修改数组的,所以当找到数字3时在循环中的 i 下标是2,而当删除数字3后,数组下标 i 位置中保存的数字变为了数字4,然后到了下一个循环 i 下标为3时,数组下标 i 位置中保存的数字是5,所以跳过了数字4,于是调试信息中没有可爱的数字4。。。原理就是这样子,是不是很绕。

    那怎么解决漏掉了数字4这个问题呢???很简单,在使用 splice 的下一句,改一下循环变量值即可。。。

    if(arr[i] === deleteNumber){
        var num = arr.splice(i,1); //从i位置开始删除一个数字
        i = i -1;  // 解决方案
    }
    

    但是还有一种解决方法就是从后往前遍历,但是本人如果没有条件限制的话更喜欢用forEach进行遍历,所以 i = i -1这种解决方式还是挺方便的。

    部分内容转自 https://blog.csdn.net/a727911438/article/details/55224532?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.opensearch_close&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.opensearch_close

  • 相关阅读:
    国际标准化组织
    SIM卡
    苹果供应商
    iOS 调试技巧
    django进阶
    web框架django初探
    jquery
    JavaScript进阶之DOM
    html和css
    前端相关html和css
  • 原文地址:https://www.cnblogs.com/lovekiku123/p/13518396.html
Copyright © 2011-2022 走看看