splice是js中一个很强大的函数,其定义以下:
splice()的主要用途是向数组的中部插入项,可是使用这种方法的方式又以下三种:
1:删除:能够删除任意数量的项,只须要指定2个参数:要删除的第一项的位置和要删除的项数,例如:splice(0,2)会删除数组中的前两项
2:插入:能够向指定位置插入任意数量的项,只需提供三个参数:起始位置,0(要删除的项数)和要插入的项。若是要插入多个项,能够再传入第4、第五,甚至更多的项,例如:
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<arr.length;i++){
if(i%2==0){
arr.splice(i,1);
}
}
for(var j=0;j<arr.length;j++){
console.log(arr[j]);
}
可是最后并无按我预期的输出,只是输出了yellow,blue,black,white函数
而后我这样执行以后:
var arr = ['red','yellow','blue','green','black','white','purple'];
for(var i=0;i<arr.length;i++){
if(i%2==0){
arr.splice(i,1);
console.log("ddddddddddd");
for(var j=0;j<arr.length;j++){
console.log(arr[j]);
}
}
}
yellow blue green black white purple
yellow blue black white purple
yellow blue black white索引
说明在进行splice的时候,数组结构已经发生了改变,只要删除一项,后面的项就会自动向前移动,而且改变自身的索引值。。。。字符串
特此记录一下这个坑,说明对基本的仍是只停留在理论上,在实践上并无进行验证。it
若是要实现本身想要的效果,提供一种方案,就是首先建立一个新数组,而后将不符合条件的项push进这个新数组,而后用新数组替换旧数组便可console