我有一个包含页面内容的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)
}
}
}
}
答案 0 :(得分:1)
这有点旧了,但我遇到了类似的问题,并在这里找到了解决方法,但我想出来并认为如果有其他人遇到这个问题我会发布解决方案。在我的情况下的问题(在你的情况下看起来虽然我不能确定)是在for循环的声明中:
for (i = 0; i < spawn.length; i++)
你并没有宣称我是一个新的变种。所以如果有什么内容
this.run_loop(newarray, newdom)
函数还操作一个名为i的计数器变量,它不会被声明为一个新的var,它也会改变你的外部范围中的一个变量,如果它超过了spawn的长度就会把你踢出循环
总是声明:
for (var i; i< spawn.length; i++)
在你的循环中或确保你的计数器是唯一的。