gpt4 book ai didi

javascript - Javascript For 循环问题

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:05 25 4
gpt4 key购买 nike

考虑下面的代码:

function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}

上面的函数应该从数组 "arrayElements" 中删除所有元素。但它不会。

Javascript 引擎按原样维护“索引”,并且不介意数组被修改。人们可能期望类似 "for each" 的循环没有这种问题

即使是下面的代码似乎也不起作用:

function splicer()
{
...
for(var index in arrayElements)
{
arrayElements.splice(index--,1);
}
...
}

即使更改变量“index”的值似乎也不起作用。更改后的值在“for(...){...}” block 中可用,但是,当循环到达下一次迭代时,该值将被重置并从下一个索引继续作为发条。

所以看起来像这样的代码可能是唯一的解决方案:

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” 或任何可能关注的人考虑,以便他们提出一个好的解决方案。

最佳答案

您可能需要引用 John Resig<​​/em> 的 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);
};

关于javascript - Javascript For 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com