【发布时间】:2023-03-08 09:30:01
【问题描述】:
这似乎是一个基本而微不足道的问题,但我无法弄清楚为什么某些内部循环没有得到处理。我有一个对象数组。我在对象内部调用带有 name 变量的函数,然后在数组中找到对象的索引。如果对象有孩子,然后我通过递归调用每个孩子的名字的函数来处理所有的孩子。这种情况一直持续到对象没有子对象为止。
结果是它只向下钻取初始对象的第一个子对象(在我的示例中它有七个),而不处理其他六个。在第一个中,它一直完成到最后(底层有八个孩子,他们都被处理了。
function modifyCheckBox(thisName, itemChecked) {
if (!itemChecked) itemChecked =
document.getElementById(thisName).checked;
//find the position in the array for thie object
var inputIndex = getIndex(thisName, checkBoxArray);
alert("Processing "+thisName+" with inputIndex of "+inputIndex);
if (checkBoxArray[inputIndex].hasChildren) {
childArray = getChildren(checkBoxArray[inputIndex].name);
childArrayString = "";
for (k=0; k<childArray.length; k++) {
childArrayString += childArray[k].name + " ";
}
alert ("Processing children " + childArrayString + " of " +
checkBoxArray[inputIndex].name + " with inputIndex=" +
inputIndex);
for (j=0; j<childArray.length; j++) {
//Repeat the process for this child
modifyCheckBox(childArray[j].name, itemChecked);
}
alert("Completed children of " +
checkBoxArray[inputIndex].name);
} else {
alert(checkBoxArray[inputIndex].name + " has no children");
}
}
警报的输出列表是
Processing chk_AINF with inputIndex of 5
Processing children chk_TRK chk_LEL chk_FAST chk_RW chk_ARSRV
chk_SIG chk_AMW of chk_AINF with inputIndex=5
Processing chk_TRK with inputIndex of 6
Processing children chk_TRK_0 chk_TRK_1 chk_TRK_2 chk_TRK_3
chk_TRK_4 chk_TRK_5 chk_TRK_6 chk_TRK_7 of chk_TRK
with inputIndex=6
Processing chk_TRK_0 with inputIndex of 50
chk_TRK_0 has no children
.......
chk_TRK_7 has no children
Completed children of chk_TRK
Completed children of chk_AINF
我的问题是 chk_LEL chk_FAST chk_RW chk_ARSRV chk_SIG 和 chk_AMW,其余最上面的孩子发生了什么?
【问题讨论】:
-
我想知道它是否将您的一些局部变量视为全局变量(因为您没有使用
var声明它们) - 因此当 modifyCheckbox 在子节点上运行时,它会更改父节点的循环计数器.我会尝试使用 var 关键字声明 childArray、childArrayString、j 和 k。
标签: javascript arrays recursion