使用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) } }
正着不行可以倒着来啊。如此,问题迎刃而解。