数组塌陷
var arr = [0, 1, 2, 3, 4, 5]
0 1 2 3 4 5
console.log('原始数组: ', arr)
利用数组的方法, 将数组的每一项 删除 pop shift splice
-
拿到数组的每一项, 暂时先不用数组的方法, 使用 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)