javascript - 数组塌陷

70 阅读2分钟
数组塌陷
  • 删除数组 可以用的方法有pop,shift,splice
var arr = [0, 1, 2, 3, 4, 5, 6]
// 利用数组的方法, 将数组的每一项 删除 pop shift splice
// 1. 拿到数组的每一项, 暂时先不用数组的方法, 使用 for循环
for(var i = 0;i < arr.length;i++){
    arr.pop()
   // 第1i === 0 arr.length === 6 条件成立, 开始执行内部代码
       // arr.pop() 将数组的最后一项删除, 删除完毕 数组.length === 5
       
   // 第2i === 1 arr.length === 5 条件成立, 开始执行内部代码
       // arr.pop() 将数组的最后一项删除, 删除完毕 数组.length === 4
       
   // 第3i === 2 arr.length === 4 条件成立, 开始执行内部代码
      // arr.pop() 将数组的最后一项删除, 删除完毕 数组.length === 3
      
   // 第4i === 3 arr.length === 3 条件不成立, 循环到此结束
   // 没有删除干净
}

var arr = [0, 1, 2, 3, 4, 5, 6]
for(var i = arr.length - 1;i >= 0;i--){
 // 这里i = arr.length - 1,是因为arr.length就是最后一位数字,后面没有可以删除的了,所以这步没必要
    arr.shift()
}
console.log(arr)
//这个因为i一直在变,然后删除后的数组的length也一直在变,删除的只是对应的索引上的数字,所以删不干净
//如果在循环内部添加i--,那么相当于一直删除的是索引0上的数字


for(i = 0;i < arr.length;i++){
    arr.splice(i,1)
    i--
}
console.log(arr)

// 第1i === 0 length === 6 符合条件
    // 执行内部代码
    //  arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
    //  i-- 此时相当于把 i 的值更改为 -1
    // 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0

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