给你一个数组,你将如何遍历它?
突然想起了4年前的一道面试题,题目很简单,就是一个数组的for循环,具体遍历后进行什么操作已经记不清楚,仅仅是进行一遍循环操作,你会怎么写代码呢?
可能很多人的第一反应和四年前的我一样,这有什么难的?
let arr = [1,2,3,4,5,4,3,2,1];
for(let i=0; i<arr.length; i++){
//遍历进行的操作
}
上面的代码看起来没有任何问题,确实,在大部分情况下,实现遍历操作都没有问题。但假如我们需要在遍历数组时删除所有的数字“3”呢?
let arr = [1,2,3,4,5,4,3,2,1]
for(let i=0; i<arr.length; i++){
//遍历删除所有数字3
if(arr[i]==3){
arr.splice(i,1)
}
}
在控制台运行一下上面的代码,输出结果看起来也没有任何问题。
但若将数组的数据更换一下,执行结果就大不相同了。
let arr = [1,2,3,3,4,5,4,3,2,1]
这是由于数组元素在删除的过程中,数组的长度和后面元素的索引都发生了变化,会导致有些元素并没有被遍历到。那么正确打开方式应该是什么呢?
let arr = [1,2,3,3,4,5,4,3,2,1]
for(let i=arr.length-1; i>=0; i--){
//遍历删除所有数字3
if(arr[i]==3){
arr.splice(i,1)
}
}
执行结果如下,输出结果没有任何问题啦。
你入坑了吗?