我有一个 Javascript 数组,用于保存页面的内容。为了在页面加载时在正确的位置绘制所有对象,我循环遍历数组并拉出元素。这种方法非常有效,直到我允许这些对象在其中拥有子对象。
当前的数组结构是
0-> {elements=[] frame={I keep the frame attributes here with key value pairs}}, 1-> {elements=[] frame={}}
但是,我刚刚开始向每个对象中的元素数组添加子元素。所以现在我必须循环/绘制每个元素,检查是否有任何子元素,如果有,那么我也必须绘制它们。
我遇到的问题是,在循环第一个 0 对象及其子对象后,for 循环停止运行。是因为我多次调用同一个函数吗?我以前也这样做过,所以我不认为这是正在发生的事情。
this.run_loop = function (spawn, dom) {
console.log(spawn)
alert(spawn.length)
for (i = 0; i < spawn.length; i++) {
console.log(spawn[i])
//alert("i one")
var newdom = dom + "_" + i;
this.synthesize_elements(spawn[i], dom, newdom)
if (spawn[i].hasOwnProperty('elements')) {
//alert("FOUND")
var newarray = spawn[i]['elements'];
if (newarray.length > 0) {
this.run_loop(newarray, newdom)
}
}
}
}
这有点老了,但我遇到了类似的问题,并在这里找到了方法,但我想通了,并认为如果其他人遇到这个问题,我会发布解决方案。我的例子中的问题(看起来也像你的例子,尽管我不能确定)是在 for 循环的声明中:
for (i = 0; i < spawn.length; i++)
你并没有声明 i 是一个新变量。所以如果
里面有任何东西this.run_loop(newarray, newdom)
function 还操作一个名为 i 的计数器变量,该变量未声明为新的 var,它还会更改外部作用域中的变量,如果它超过了 spawn 的长度,则将你踢出循环
始终声明:
for (var i; i< spawn.length; i++)
在你的循环中或确保你的计数器是唯一的。
谢谢 bryan60,当我的循环在调用函数后第一次迭代时停止时,这让我有点困惑,我不知道为什么。
设置var i = 0;而不是 i = 0 解决了它。