for循环和splice的坑

使用for循环遍历数组删除元素时会出现漏删的情况

let arr=["a","a","a","b","e","f"];
for(let i=0;i<arr.length;i++){
	if(arr[i]==="a"){
		arr.splice(i,1);
	}
}
console.log(arr)//["a","b","e","f"]

原因:当数组长度改变时i继续改变会跳过其中的元素
解决方法:

  1. 使用i--
let arr=["a","a","a","b","e","f"];
for(let i=0;i<arr.length;i++){
	if(arr[i]==="a"){
		arr.splice(i,1);
	i--;
	}
}
console.log(arr)//["b","e","f"]

2.使用倒序删除(未处理的元素相对位置没变)

let arr=["a","a","a","b","e","f"];
for(let i=arr.length-1;i>=0;i--){
	if(arr[i]==="a"){
		arr.splice(i,1);
	}
}
console.log(arr)//["b","e","f"]
posted @ 2022-09-16 16:04  浮生阁阁主  阅读(46)  评论(0)    收藏  举报