今天使用 splice又遇到乙個沒注意到的小坑。先看下它的定義與用法
splice() 方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。
注釋:該方法會改變原始陣列。
arrayobject.splice(index,howmany,item1,.....,itemx)
引數
描述index
必需。整數,規定新增/刪除專案的位置,使用負數可從陣列結尾處規定位置。
howmany
必需。要刪除的專案數量。如果設定為 0,則不會刪除專案。
item1, ..., itemx
可選。向陣列新增的新專案。
型別描述
array
包含被刪除專案的新陣列,如果有的話。
splice() 方法可刪除從 index 處開始的零個或多個元素,並且用引數列表中宣告的乙個或多個值來替換那些被刪除的元素。
如果從 arrayobject 中刪除了元素,則返回的是含有被刪除的元素的陣列。
以前都是匹配到某個陣列裡面的一項,然後用 arr.splice(i,1)刪除掉那項陣列元素,然後返回新的陣列。例如:
this.tabledata.foreach(item =>
})});
這樣寫並沒有什麼問題,刪除掉陣列中那個id相等的。但是在今天的例子中有所不同。如下:
var arr=[1]
for(var i=0;i
這個也還正常,陣列中只有一項,刪掉以後變為空的陣列。
var arr=[1,2]
for(var i=0;i
但是這個就有坑了,陣列中只有兩項的時候,這樣並沒有和我所想的一樣去執行兩次,輸出兩次console.log(11111),並且陣列為空。 仔細想了下,應該是在第一次迴圈的時候,arr.splice(i,1)擷取完成後,arr的長度就已經變成了1,而不再是2了。所以第二次迴圈並沒有去執行。且原先的第二個陣列也保留了下來。
也就是說使用arr.splice(i,1)迴圈陣列時,迴圈次數會比正常的-1次。
所以在使用arr.splice(i,1) 並且再迴圈中使用時,一定住注意length的變化。
其實單純使用splice並不會有問題,但是在迴圈中使用的話,就必須考慮到length的變化。
最後加了一段if(item.value.length==1)
判斷來完成的迴圈。
當然完全類似這種需求我就不建議使用splice去做了,不如把符合條件的物件都push到乙個新陣列裡,去操作那個新陣列。邏輯會清晰很多。
this.tabledata.foreach(item =>
});item.value=checkarr;
});
陣列中的splice
splice index,num,string 刪除 var arr smile 2,3,marie arr.splice 0,2 從第乙個值 0 開始刪除該資料的兩 2 個值 alert arr.splice 0,2 返回 smile,2 alert arr 返回3,marie 修改 var ar...
splice 陣列方法
向 從陣列中新增 刪除專案,然後返回被刪除的專案。會改變原始陣列 返回值 改變後的陣列。引數 arrayobject.splice index,howmany,item1,itemx index 必需。整數,規定新增 刪除專案的位置,使用負數可從陣列結尾處規定位置。howmany 必需。要刪除的專案...
splice 陣列刪除方法
splice增加資料到陣列 arr.splice 2,0,item 這句話中第乙個2指的是從arr 2 開始,0指刪除0個資料,item指插入資料為item arr.splice 2,1 這句話中第乙個2指的是從arr 2 開始,1指刪除1個資料 元素描述 index 必需。規定從何處新增 刪除元素...