我将项目推入数组,但脚本变得无响应
I am pushing items into an array but the script becomes unresponsive?
我正在尝试使用for循环将数组的成员添加回自身。
为什么这段代码会导致脚本无响应?
var magicarray = {
arraymemeber: [1, 2, 3, 4, 5],
duplicate: function () {
for (var i = 0; i < this.arraymemeber.length; i++) {
this.arraymemeber.push(this.arraymemeber[i]);
};
}
};
console.log(magicarray.duplicate());
虽然我不确定为什么要这样做,但为了避免无限循环,您目前已经首先获得长度,并且只迭代数组的原始长度。
var magicarray = {
arraymemeber: [1,2,3,4,5],
duplicate: function() {
var length = this.arraymemeber.length;
for (var i = 0; i < length; i++) {
this.arraymemeber.push(this.arraymemeber[i]);
};
}
};
console.log(magicarray.duplicate());
因为您在迭代时推入新项,并且您的条件基于当前的.length
,导致无限迭代(或至少与.length
允许的高度相同)
如果你想"double"数组,你不需要循环。你可以这样做:
this.arraymember.push.apply(this.arraymember, this.arraymember)
那么你的对象就是:
var magicarray = {
arraymemeber: [1, 2, 3, 4, 5],
duplicate: function () {
this.arraymember.push.apply(this.arraymember, this.arraymember)
}
};
每次循环一次,都将一个项放入数组中。它的长度增加了1。
由于this.arraymemeber.length
与i
以相同的速率增长,因此您永远不会到达循环的末端。
因为在每次迭代中,你都在为迭代的元素添加一个新元素。
在每次迭代结束时进行i < this.arraymemeber.length
检查。数组的长度不会以任何方式被缓存。
要防止无限循环,请使用
for (var i = 0, len = this.arraymemeber.length; i<len; i++) {
…div。
就这样做:
this.arraymemeber = this.arraymemeber.concat(this.arraymemeber);
相关文章:
- 真的没有办法在Firefox中自动杀死没有响应的脚本吗
- 如何获取从 AJAX 到脚本的发送响应
- 为什么我的附加组件面板的内容脚本在更改 contentURL 后不再响应端口消息
- 如果HTTP响应为404,脚本标记会被阻塞吗
- 将简单的Perl脚本翻译成Python,向客户端发送响应
- 如何在java脚本中从http响应生成blob
- 在Java(Coffee)脚本中获取响应值
- 当我使用java脚本调用web服务时,模拟器上没有得到响应
- 加速谷歌脚本中的onEdit功能-有时没有响应
- Java脚本将URL的响应读取到变量中
- 避免'脚本没有响应'使用反向AJAX/Comet
- F5负载平衡器附加<脚本>到JSON Ajax响应
- Javascript随机名称猜测者:无响应的脚本问题
- 避免“;无响应脚本"foreach循环中的消息
- jQuery ajax 调用 - jim 脚本响应应该是什么格式
- 如何删除响应式移动设备的脚本
- 如何从 jQuery ajax 响应中删除<脚本>标签
- jQuery 如何导致执行在 AJAX 响应中返回的脚本标记中找到的 JS 代码
- 如何使用 AJAX 获取 CGI 脚本响应
- ReactJS -在渲染前等待第三方脚本响应