【发布时间】:2013-06-30 01:36:44
【问题描述】:
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 控制台中复制粘贴代码进行测试。
【问题讨论】:
-
你能澄清“不工作”吗?当您尝试代码时会发生什么,它与您的预期有何不同?您收到任何错误消息吗?
-
拼接函数从数组中删除元素。它应该删除所有具有数字索引的元素,但删除的元素很少
-
所以 splice 希望我提供一个数字索引,所以 (n,x) 表示从数字索引 n 开始并在索引 n 之后删除 x 值。如果 n 不是数字而是键,则不需要 x。所以它工作正常 x 被删除。
-
不,没有索引就不行。如果只指定一个参数,即用作索引,它将删除数组末尾的所有项目。如果您使用带有键而不是索引的方法并且它似乎有效,那只是巧合,因为您使用的特定值恰好给出了相同的结果。
标签: javascript jquery arrays splice for-in-loop