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)