请考虑以下代码:
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}
上述函数应该从数组"arrayElements"
中删除所有元素。但它不会。
Javascript引擎保持"index"
不变,并且不介意修改数组。
人们可能期望像"for each"
循环那样没有这种问题的东西
即使以下代码似乎也不起作用:
function splicer()
{
...
for(var index in arrayElements)
{
arrayElements.splice(index--,1);
}
...
}
即使更改变量“index”的值似乎也不起作用。 更改后的值在“for(...){...}”块中可用,但是,当循环到达下一次迭代时,该值将重置并从下一个索引继续作为发条。
所以似乎这样的代码可能是唯一的解决方案:
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index=0;index<arrayElements.length;index++)
{
arrayElements.splice(index--,1);
}
alert("Elements: "+arrayElements);
}
经测试: Firefox 16 Beta。
但是将一元操作符置于 "splice()"
方法中似乎一见钟情。
这可能值得考虑 "W3C"
或其所关注的任何人,以便他们提出一个很好的解决方案。
答案 0 :(得分:2)
您可能需要参考 John Resig 的array.remove()
link。
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
答案 1 :(得分:0)
试试这个:
* Splice修改原始数组,因此tge循环跳过备用值。 *
var arrayElements = ["elem1","elem2","elem3","elem4"];
arrayElements.splice(0,arrayElements.length);
alert("Elements: "+arrayElements)