数组塌陷
- 删除数组 可以用的方法有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()
// 第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, 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)
// 第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 不符合条件 循环到此结束