使用splice进行删除时,目标元素删不干净问题。splice居然无效了

本文探讨了在JavaScript中使用splice方法删除数组元素时遇到的问题,即当数组中有多个连续相同元素需要删除时,由于数组长度的变化导致删除不完全。作者通过实例展示了正向遍历时的问题,并提出了反向遍历的解决方案,以此确保所有目标元素都能正确删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用splice进行删除时,目标元素删不干净问题。splice居然无效了

近期在帮助同事处理商品多规格业务的时候,偶然遇到的怪事,在使用splice进行删除数组中的子规格时,总是会保留一个目标元素,未能成功被删除,特此一记。

思虑再三,还是不那么费事交代故事背景了,直接说问题。
首先:splice() 方法用于添加或删除数组中的元素。注意:这种方法会改变原始数组。
从函数定义的注意上我们应该就能看出点东西,“原始数组被改变”,那么问题就来了,拿着可能会不断被改变的数组进行多次删除,势必会导致在循环时错漏掉其中的某些索引。试验一下:
在这里插入图片描述
当数组中连续存在需要删除的目标元素时,问题就已经很明显了,因为原始数组的改变,导致每次删除之后都会隔一个元素进行删除,出现漏网之鱼。

我检讨我自己,我是罪人啊,以往在使用splice时通常都是因为操作数组只存在其中一项是需要删除的,所以直接使用splice是没问题的,猛地遇到个稍微不一样的情况自己居然还懵逼了一阵子,实在是不应该啊。汗颜!!!!同志仍需努力啊!!!

问题已经找到,解决起来就好办了。同样借用上面的代码例子:
在这里插入图片描述
如上图,var fruits = ["1","1","1","1","1","1","1","Banana","1","1","1"]; for(var i = fruits.length-1;i>=0;i--){ if(fruits[i]=="1"){ fruits.splice(i,1) } }正着不行可以倒着来啊。如此,问题迎刃而解。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值