陣列splice細節問題

2021-08-31 16:06:03 字數 1436 閱讀 2906

今天使用 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 必需。規定從何處新增 刪除元素...