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