12.30---01数组塌陷

55 阅读3分钟

数组塌陷

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()
      **
         *  第 1 轮
         *      i === 0     arr.length === 6        条件成立, 开始执行内部代码
         *          arr.pop()       将数组的最后一项删除, 删除完毕 数组.length === 5
         * 
         *  第 2 轮
         *      i === 1     arr.length === 5        条件成成立, 开始执行内部代码
         *          arr.pop()       将数组的最后一项删除, 删除完毕 数组.length === 4
         * 
         *  第 3 轮
         *      i === 2     arr.length === 4        条件成立, 开始执行内部代码
         *          arr.pop()       将数组的最后一项删除, 删除完毕 数组.length === 3
         * 
         *  第 4 轮
         *      i === 3     arr.length === 3        条件不成立, 循环到此结束
         */
      }
    

`

     var arr = [0, 1, 2, 3, 4, 5]
       console.log('原始数组: ', arr)
    for (var i = arr.length - 1; i >= 0; i--) {
        // arr.pop()
        // arr.shift()
        arr.splice(i, 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    条件不成立, 循环到此结束
    */
    }

`

    var arr = [0, 1, 2, 3, 4, 5]
    //         0  1  2  3  4  5
    console.log('原始数组: ', arr)
    for (var i = 0; i < arr.length; i++) {
        arr.splice(i, 1)
        i--
        
  /**
 *   第 1 轮
 *      i === 0     length === 6    符合条件
 *          执行内部代码
 *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
 *              + i--               此时相当于把 i 的值更改为 -1
 *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
 * 
 *  第 2 轮
 *      i === 0     length === 5    符合条件
 *          执行内部代码
 *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
 *              + i--               此时相当于把 i 的值更改为 -1
 *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
 * 
 *  第 3 轮
 *      i === 0     length === 4    符合条件
 *          执行内部代码
 *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
 *              + i--               此时相当于把 i 的值更改为 -1
 *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
 * 
 *  第 4 轮
 *      i === 0     length === 3    符合条件
 *          执行内部代码
 *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
 *              + i--               此时相当于把 i 的值更改为 -1
 *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
 * 
 *  第 5 轮
 *      i === 0     length === 2    符合条件
 *          执行内部代码
 *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
 *              + i--               此时相当于把 i 的值更改为 -1
 *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
 * 
 *  第 6 轮
 *      i === 0     length === 1    符合条件
 *          执行内部代码
 *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
 *              + i--               此时相当于把 i 的值更改为 -1
 *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
 * 
 *  第 7 轮
 *      i === 0     length === 0    不符合条件, 循环到此结束
 }

    console.log('删除后的数组: ', arr)