Javascript数组拼接无法正常工作
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);
问题:在第***
行为什么拼接(键(工作正常(删除所有带有数字索引的元素(和拼接(键,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(splice期望索引作为第一个参数,而不是键
见 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(n,x); //n and x are numeric here
它将开始从索引 n 开始的数组中删除值,并在索引 n 之后删除 x 值。
现在if n is not numeric but a key
不需要 x,因为 x 可以在numeric-indexed array
中向前移动指针,而不是关联数组。因此,从拼接(n,x(中删除x将使功能类似于splice(key(等,因此它可以正常工作。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)