Javascript For循环问题

时间:2012-09-28 08:29:49

标签: javascript arrays for-loop foreach

请考虑以下代码:

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

2 个答案:

答案 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)