数组的for循环,一道超简单的面试题,你入坑了吗?

      给你一个数组,你将如何遍历它?

      突然想起了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)
    }
}

      执行结果如下,输出结果没有任何问题啦。

      你入坑了吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值