当使用数组splice删除元素时,你应该知道这个小坑

2,552 阅读2分钟
原文链接: mp.weixin.qq.com

先说下大致的业务需求,就是从后端返回的数据中,保留符合某些条件的数据。简化到代码上的需求,就是在一个数组中保留符合条件的元素。

    模拟上述需求,从数组[1,2,5,6,8,9]中保留小于等于4的元素。思路,循环数组,然后从循环中调判断如果元素大于4,那么就使用splice剔除掉。

代码如下:

这时我们发现,奇怪了,为什么 6和9被保存了下来呢?这是因为我们每次找到大于4的元素之后,就直接splice剔除掉了,需要注意的是,splice是一个会变异方法,也就是会改变原数组的方法,所以当i等于2的时候,会找到元素‘5’,然后splice的时候,由于元素‘5’剔除之后,有空位,后面的元素‘6’ ‘8’ ‘9’就都往前补一位,但是此时i的值在结束此次循环之后,经过了i++语句,就是直接跳到元素‘8’的位置了,元素‘6’因为补位 躲过了一劫! 再次循环9又因为补位也躲过了一劫,所以结果就是1269

大致流程如下图所示:

当 i 等于4 的时候 情况也是一样的,元素‘9’补位,躲过一劫。

所以在判断语句中我们可以这样子

上述就是使用splice的时候,要注意数组的变化以及索引的位置。

当然 我们也可以用一个新数组来保存,符合条件的元素,或者使用数组的filter方法来筛选元素

本文完....

PS:

    由于年底项目多,作者苦做加班狗,一个月单人撸出一个app,所以拖更了,非常抱歉。只要有空闲时间,我就会分享一些工作用到,实用的实战demo给大家。