splice是js中一个很强大的函数,其定义如下:
splice()的主要用途是向数组的中部插入项,但是使用这种方法的方式又如下三种:
1:删除:可以删除任意数量的项,只需要指定2个参数:要删除的第一项的位置和要删除的项数,例如:splice(0,2)会删除数组中的前两项
2:插入:可以向指定位置插入任意数量的项,只需提供三个参数:起始位置,0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,甚至更多的项,例如:
splice(2,0,"red",","green")会从当前数组的位置2开始插入字符串“red"和"green".
3:替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,只需指定三个参数:起始位置,要删除的项数和要插入的任意数量的项。插入的项数不必须与删除的项数相等。例如:splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green"。
虽然知道splice的一些基本用法的定义,但是最后在使用复杂数组的情况的时候,逻辑上还是犯了错误,比如在for循环中使用对数组的splice操作的时候:
如果想删除一个数组中的奇数项的时候,我选择了这样做:
var arr = ['red','yellow','blue','green','black','white','purple'];
for(var i=0;i
if(i%2==0){
arr.splice(i,1);
}
}
for(var j=0;j
console.log(arr[j]);
}
但是最后并没有按我预期的输出,只是输出了yellow,blue,black,white
然后我这样执行之后:
var arr = ['red','yellow','blue','green','black','white','purple'];
for(var i=0;i
if(i%2==0){
arr.splice(i,1);
console.log("ddddddddddd");
for(var j=0;j
console.log(arr[j]);
}
}
}
yellow blue green black white purple
yellow blue black white purple
yellow blue black white
说明在进行splice的时候,数组结构已经发生了改变,只要删除一项,后面的项就会自动向前移动,并且改变自身的索引值。。。。
特此记录一下这个坑,说明对基本的还是只停留在理论上,在实践上并没有进行验证。
如果要实现自己想要的效果,提供一种方案,就是首先创建一个新数组,然后将不符合条件的项push进这个新数组,然后用新数组替换旧数组即可