5

考虑下面的代码:

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"它或它可能关心的任何人,以便他们提出一个很好的解决方案。

4

2 回答 2

2

您可能需要参考John Resigarray.remove() 链接

// 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);
};
于 2012-09-28T08:36:49.167 回答
0

尝试这个:

* Splice 修改原始数组,因此 tge 循环跳过备用值。*

var arrayElements = ["elem1","elem2","elem3","elem4"];
arrayElements.splice(0,arrayElements.length);
alert("Elements: "+arrayElements)
于 2012-09-28T08:38:16.993 回答