[JS]應用splice刪除多元素時出現的坑


-------------------------------------------------------------------------------------

先看一個片段:

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++;
}

 原理是我們縮減索引值,來達到和要刪除元素的索引對上的目的。

 

Link:http://www.cnblogs.com/farwish/p/5204370.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM