Javascript For循环的问题
考虑以下代码:Javascript For循环的问题,javascript,arrays,for-loop,foreach,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引擎保持了“索引
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}
上述函数用于从数组中删除所有元素“arrayElements”
。但不会
Javascript引擎保持了“索引”
,不介意修改数组。
对于不存在此类问题的每个“循环,人们可能会期望类似于”的内容
甚至以下代码似乎也不起作用:
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);
}
函数拼接器()
{
变量数组元素=[“elem1”、“elem2”、“elem3”、“elem4”];
对于(var index=0;index,您可能需要参考John Resig的array.remove()
//数组删除-由John Resig(麻省理工学院授权)
Array.prototype.remove=函数(从,到){
var rest=this.slice((to | | from)+1 | | this.length);
this.length=from<0?this.length+from:from;
返回此。推。应用(此,其余);
};
试试这个:
*拼接修改原始数组,因此tge循环跳过备用值*
可能重复的非替代值它只是逐步跳过。第一次迭代跳过一个,第二次跳过两个,不包括它已经跳过的第一个。等等…我不强调清空数组!我希望观众可能会想到一个可能的解决方案/解释这种场景中的JavaScript行为,如果你看到e-,它清楚地写着,此方法改变了原始数组。
让我为您创建一个小提琴,希望它能让事情变得清楚。我会在某个时候发布它。D这段代码看起来不错。但是修改了“开箱即用”数组对象听起来不是一个好主意。顺便说一句,代码片段乍一看不是用户友好的。编写此代码的人可能已经仔细地完成了此操作,他一定非常擅长此操作…@CrystalPaladin链接为您提供了一个未使用原型的示例。
// 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);
};
var arrayElements = ["elem1","elem2","elem3","elem4"];
arrayElements.splice(0,arrayElements.length);
alert("Elements: "+arrayElements)