数组塌陷:操作数组的时候会使数组的索引发生变化,造成数组中的某项被跳过。
例如:删除数组中的每一项
.for (var i = 0; i < arr.length; i++) { arr.splice(i, 1) }
1 . 每次执行i–
for (var i = 0; i < arr.length; i++) {
arr.splice(i, 1)
i--
}
/*
i = 0 进入循环 把数组第 0 项干掉 arr = [2, 3, 4] length = 3 i = -1
i = 0 进入循环 把数组第 0 项干掉 arr = [3, 4] length = 2 i = -1
i = 0 进入循环 把数组第 0 项干掉 arr = [4] length = 1 i = -1
i = 0 进入循环 把数组第 0 项干掉 arr = [] length = 0 i = -1
i = 0 不进入循环
*/`
2.从后往前遍历
for (var i = arr.length - 1; i >= 0; i--) {
arr.splice(i, 1)
}
/*
i = 3 进入循环 把数组的第 3 项干掉 arr = [1, 2, 3] length = 3
i = 2 进入循环 把数组的第 2 项干掉 arr = [1, 2] length = 2
i = 1 进入循环 把数组的第 1 项干掉 arr = [1] length = 1
i = 0 进入循环 把数组的第 0 项干掉 arr = [] length = 0
i = -1 不进入循环
*/