[英]Using splice to delete item in array
為什么原始數組中的剩余部分 = [1, 3, 5, 7, 9]
由於 arr.splice(i, 1) = i 是目標索引,1 是要刪除的項數,因此 i 分別從 i++ 增加到 10,即 i = i + 1 的縮寫,那么為什么要刪除 5 個索引並在數組中保留 5 ? 這就是我到目前為止所知道的,我一直在努力閱讀文檔,但仍然不知道要理解,請為我解釋一下
let arr = [1,2,3,4,5,6,7,8,9,10];
for(let i = 1; i < arr.length; i++) {
arr.splice(i, 1);
}
這是因為每次 splice 函數運行時,arr 的長度都會減少。 這是數組的變化方式。
[2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 9, 10]
[2, 4, 6, 8, 10]
所以每個循環,i 增加,arr.length 減少 1。所以只有 5 個循環運行,結果是 [2, 4, 6, 8, 10]
您想知道為什么要刪除 1、3、5、7 和 9,對嗎?
這是為什么。 隨着 for 循環的迭代, i
不斷增加 1。 但是,通過調用.splice
,您正在刪除數組的第一個元素,因此,每個其他元素都會向下移動一個索引。
讓我們在 for 循環的幾次迭代中一步一步地進行。
我 = 0; arr.splice(0, 1)
移除 1,所以arr
是[2, 3, 4, 5, 6, 7, 8, 9, 10]
我 = 1; arr.splice(1, 1)
刪除3 ,而不是 2 ,因為現在 3 位於arr
索引 1 處。 執行拼接使arr
為[2, 4, 5, 6, 7, 8, 9, 10]
。
我 = 2; arr.splice(2, 1)
刪除 5,因為 5 當前位於索引 2 處。因此, arr
變為[2, 4, 6, 7, 8, 9, 10]
。
現在清楚是怎么回事了嗎?
如果您的目標是連續刪除每個元素,一次一個,那么您應該調用.splice(0, 1)
而不是在循環的每次迭代中調用.splice(i, 1)
.splice(0, 1)
,因為索引 0 處的值每次調用.splice
時都會發生變化。
您需要檢查 for 循環結束條件,i 沒有增加到 10。為什么? 因為我 < arr.length。 所以它會像這樣:
迭代 1:
i=0; arr.length = 10; arr = [1,2,3,4,5,6,7,8,9,10]; ==> result [2,3,4,5,6,7,8,9,10];
迭代 2:
i=1; arr.length = 9; arr = [2,3,4,5,6,7,8,9,10]; ==> result [2,4,5,6,7,8,9,10];
迭代 3:
i=2; arr.length = 8; arr = [2,4,5,6,7,8,9,10]; ==> result [2,4,6,7,8,9,10];
. . .等等
i = 5 ==> arr.length: 5 ==> final result : [2, 4, 6, 8, 10]
因此,如果您想使用 splice 刪除所有項目:
let arr = [1,2,3,4,5,6,7,8,9,10];
while(arr.length > 0) {
arr.splice(0, 1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.