hello,大家周末好今天给大家分享一个数组抖动相关的问题。
模拟业务场景:一个数组中Arr[1,2,3,4]然后删除key为1和2的值
var arr = [1,2,3,4];
arr.forEach((item,index)=>{
if(item == 1 || item == 2) arr.splice(index,1); //splice是直接改变的原数组
})
console.log(arr); //输出结果[2,3,4]
为什么2也满足条件为什么没有删除掉呢???
因为:splice不是返回新的数组而是直接改变原数组,这时候1首先满足条件删除以后arr的下标会跟着改变这时候的arr为[2,3,4],因为第一次循环已经走过所以下次不会从0开始循环,所以造成了2满足条件反而没有删除。
解决方法:(倒着循环)
for(let i = arr.length - 1 ; i <= 0 ; i--){
if(arr[i] == 1 || arr[i] == 2) arr.splice(index,1);
}
console.log(arr); //输出结果[3,4]