我在 tree order 中有一个遍历文档树中节点的递归算法
这将如何迭代? My attempt at making it iterative completely failed
function recursivelyWalk(nodes, cb) {
for (var i = 0, len = nodes.length; i < len; i++) {
var node = nodes[i],
ret = cb(node)
if (ret) {
return ret
}
if (node.childNodes.length) {
var ret = recursivelyWalk(node.childNodes, cb)
if (ret) {
return ret
}
}
}
}
最佳答案
连接子节点(如果有的话)并使用 while(nodes.length)
循环怎么样?基本上,不断向堆栈添加新节点,并继续运行循环(每次测试一个节点)直到堆栈为空:http://jsfiddle.net/gEm77/1/ .
var z = 0; // my precaution for a while(true) loop
function iterativelyWalk(nodes, cb) {
nodes = [].slice.call(nodes);
while(++z < 100 && nodes.length) {
var node = nodes.shift(),
ret = cb(node);
if (ret) {
return ret;
}
if (node.childNodes.length) {
nodes = [].slice.call(node.childNodes).concat(nodes);
}
}
}
关于javascript - 将递归节点遍历变成迭代节点遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549102/