[英]Javascript Array Splice Not working fine
var cache = [];
cache[0] = "0";
cache[1] = "1";
cache[2] = "2";
cache[3] = "3";
cache[4] = "4";
cache["r"] = "r";
console.log(cache.length);
for(key in cache){
if(isNaN(key))continue;
else cache.splice(key,1); // cache.splice(key) is working fine, ***
}
console.log(cache);
問題:在***
行中,為什么splice(key)可以正常工作(刪除帶有數字索引的所有元素),而splice(key,1)不能正常工作(不刪除帶有數字索引的元素)。 即使我嘗試過
splice(key,1) // Not working as splice(key)
splice(key--,1) // Even not working as splice(key)
splice(key,0) // not deleting any thing
您可以在Firebug控制台中復制和粘貼代碼以進行測試。
它不起作用,因為在循環遍歷鍵時要從數組中刪除項目。 當您刪除一個項目時,它將根據內部實現數組的方式重新排列其他項目,最終您將得到一個循環,該循環不會迭代您期望的鍵。
當我嘗試在Firefox,它只遍歷鍵0
, 1
, 2
和r
迭代時刪除項目將使其跳過3
和4
。 splice
本身可以正常工作,但是會影響循環,因此某些項目根本不在迭代中。
當您實際上通過跳過非數字鍵在數組中查找索引時,可以直接遍歷索引。 通過向后循環遍歷它們,您不會在遍歷數組時遇到數組更改的問題:
var cache = ["0", "1", "2", "3", "4"];
cache.r = "r";
console.log(cache.length);
for (var i = cache.length - 1; i >= 0; i--) {
cache.splice(i, 1);
}
console.log(cache);
演示: http : //jsfiddle.net/CguTp/1/
1) cache["r"] = "r";
不會將元素添加到數組,而是將屬性添加到緩存對象
要初始化數組,您可以使用類似
var cache = ["0", "1", "2", "3", "4", "r"];
要么
var cache = new Array();
cache.push("0");
cache.push("1");
cache.push("2");
cache.push("3");
cache.push("4");
cache.push("r");
由於您的緩存對象不是數組,因此不能期望拼接行為像數組一樣。
2)拼接期望索引是第一個參數,而不是鍵
看到http://www.w3schools.com/jsref/jsref_splice.asp
因此,您可以使用它刪除所有數字值:
for (var i = 0; i < cache.length; i++) {
if (!isNaN(cache[i])) {
cache.splice(i, 1); // cache.splice(key) is working fine, ***
i--;
}
}
Splice希望第一個索引為數字,
splice(n,x); //n and x are numeric here
它將開始從索引n開始的數組中刪除值,並刪除索引n之后的x值。
現在, if n is not numeric but a key
則不需要x,因為x只能在numeric-indexed array
向前移動指針,而不是關聯數組。 因此,從splice(n,x)中刪除x會使函數類似於splice(key)等,因此可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.