JS数组的塌陷

29 阅读3分钟

48、数组塌陷

    var arr = [0, 1, 2, 3, 4, 5]
    //          0  1  2  3  4  5
    console.log('原始数组', arr)

    // 利用数组的方法,将数组的每一项 删除

    // 利用数组的方法,将数组的每一项删除pop shift splice
    // 1.拿到数组的每一项,暂时先不用数组的方法,使用for循环
    // for (var i = 0; i < arr.length; i++) {
    //   arr.pop()
    //   /**
    //    * 第一轮循环
    //    *    i === 0   arr.length === 6   条件成立,开始执行内部代码
    //    *      arr.pop()   将数组的最后一项删除,删除完毕 arr.length = 5
    //    * 第二轮循环
    //    *     i === 1   arr.length === 5   条件成立,开始执行内部代码
    //    *      arr.pop()   将数组的最后一项删除,删除完毕 arr.length = 4
    //    * 第二轮循环
    //    *     i === 2   arr.length === 4   条件成立,开始执行内部代码
    //    *      arr.pop()   将数组的最后一项删除,删除完毕 arr.length = 3
    //    * 第二轮循环
    //    *     i === 3   arr.length === 3   条件不成立,循环到此结束
    //    * */ 
    // }
    for(var i = arr.length; i >= 0; i--) {
      arr.pop()
      // arr.unshift()
    }
    console.log('删除后的数组', arr)

    for(var i = arr.length - 1; i >= 0; i--) {
      arr.splice(i, 1)
    }
    console.log('删除后的数组', arr)

    var arr = [0, 1, 2, 3, 4, 5]
    //         0  1  2  3  4  5
    console.log('原始数组', arr)
    // 数组塌陷情况1
    for(var i = 0; i < arr.length; i++) {
      arr.splice(i, 1)
      /**
       * 第1轮
       *    i === 0   arr.Length === 6  符合条件
       *        arr.splice(i, 1)    (0,1)把[0]的值截取掉了
       *          现在的数组: arr === [1,2,3, 4, 5]
       *          对应的下标           0  1  2  3  4
       *          数组的Length === 5
       * 第2轮
       *    i === 1    arr.Length === 5  符合条件
       *        arr.splice(i, 1)    (1,1)把[1]的值截取掉了
       *          现在的数组:arr === [1,3,4,5] 
       *          对应的下标          0  1  2  3
       *          数组的Length === 4
       * 第3轮
       *    i === 2    arr.Length === 4  符合条件
       *        arr.splice(i, 1)    (2,1)把[2]的值截取掉了
       *          现在的数组: arr === [1, 3, 5]
       *          对应的下标           0  1  2
       *          数组的Length === 3
       * 第4轮
       *    i === 3    arr.Length === 3  条件不成立,循环到此结束
       * */ 
      i-- //可以解决塌陷
      // var arr = [0, 1, 2, 3, 4, 5]
      //            0  1  2  3  4  5
      /**
       * 第1轮
       *    i === 0   length === 6  符合条件,执行内部代码
       *        arr.splice(i, 1)此时相当于 把[0]的值截取掉了也就是0
       *        i--   此时相当于把i的值更改为-1
       *        循环内部代码执行完毕之后,会执行一个 i++,所以下一轮循环开始的时候i的值===0
       * 
       * 第2轮
       *    i === 0   length === 5  符合条件,执行内部代码
       *        arr.splice(i, 1)此时相当于 把[0]的值截取掉了也就是1
       *        i--   此时相当于把i的值更改为-1
       *        循环内部代码执行完毕之后,会执行一个 i++,所以下一轮循环开始的时候i的值===0
       * 
       * 第3轮
       *    i === 0   length === 4  符合条件,执行内部代码
       *        arr.splice(i, 1)此时相当于 把[0]的值截取掉了也就是2
       *        i--   此时相当于把i的值更改为-1
       *        循环内部代码执行完毕之后,会执行一个 i++,所以下一轮循环开始的时候i的值===0
       * 
       * 第4轮
       *    i === 0   length === 3  符合条件,执行内部代码
       *        arr.splice(i, 1)此时相当于 把[0]的值截取掉了也就是3
       *        i--   此时相当于把i的值更改为-1
       *        循环内部代码执行完毕之后,会执行一个 i++,所以下一轮循环开始的时候i的值===0
       * 
       * 第5轮
       *    i === 0   length === 2  符合条件,执行内部代码
       *        arr.splice(i, 1)此时相当于 把[0]的值截取掉了也就是4
       *        i--   此时相当于把i的值更改为-1
       *        循环内部代码执行完毕之后,会执行一个 i++,所以下一轮循环开始的时候i的值===0
       * 
       * 第6轮
       *    i === 0   length === 1  符合条件,执行内部代码
       *        arr.splice(i, 1)此时相当于 把[0]的值截取掉了也就是5
       *        i--   此时相当于把i的值更改为-1
       *        循环内部代码执行完毕之后,会执行一个 i++,所以下一轮循环开始的时候i的值===0
       * 
       * 第5轮
       *    i === 0   length === 0  不符合条件,循环到此结束
       * */ 
    }
    console.log('删除后的数组', arr)