-------------------------------------------------------------------------------------
先看一個片段:
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.splice(2,2); # Banana,Orange
上面兩行代碼完全沒有問題,能達到我們想要的效果。
假如變成了下面這種情況:
var origin=["aa","bb","cc","dd"]; var has = ["bb", "cc"]; var _index = []; for (i in origin) { # 這里或者使用for..in,不是重點 if ($.inArray(origin[i], has) != -1) { _index.push(i); } } # 重點來了 for (j in _index) { origin.splice(_index[j], 1); } console.log(origin); # 現在會輸出我們想要的結果 ["aa", "dd"] 嗎?
運行一下,我們看到了不是我們想要的結果,原因是執行一次splice,原數組就被更改過了,索引數組的索引重新排列整齊,這樣我們記錄的老的排列索引就對不上了。
原來是這樣。
那么我們現在需要修改一下重點splice部分的代碼:
var k = 0; for (j in _index) { origin.splice(_index[j] - k, 1); k++; }
原理是我們縮減索引值,來達到和要刪除元素的索引對上的目的。