splice 操作会直接改变数组,导致数组 length 改变, 使用forEach 循环数组并splice数组后,index下标指向错误,导致数组数据混乱。
例如:我需要删除数组中第3 个和第 4 个元素,直接使用splice 删除指定位置元素,但结果确是删除了其他元素,删除了 3 和 5。
思考1: 经历过splice 后,length 越来越小, 整个数组元素左移动,index下标对应的元素也相应的左移动,导致使用index定位元素不准确。如果采用 index倒序的方式进行splice操作,会不会能解决index定位元素不准确的问题。
解决代码1:
let a = [0,1,2,3,4,5,6,7,8,9];
let tmpArr = []
a.forEach((v,index) => {
if (index == 3) {
tmpArr.unshift(index)
}
if (index == 4) {
tmpArr.unshift(index)
}
})
tmpArr.forEach( v =>{
a.splice(v, 1)
})
console.log(a)