Javascript,在对象树中循环?
我有一个关于递归函数的问题。我有一个对象树,我必须递归地循环,并进入到一些对象属性有子数组等的级别 我有一个函数,用于获取对象树和级别(从一开始就是0)作为参数,如下所示:Javascript,在对象树中循环?,javascript,json,object,tree,Javascript,Json,Object,Tree,我有一个关于递归函数的问题。我有一个对象树,我必须递归地循环,并进入到一些对象属性有子数组等的级别 我有一个函数,用于获取对象树和级别(从一开始就是0)作为参数,如下所示: var foo = function(objTree, level) {} 在这个函数中,我必须递归地遍历“objTree”,并创建一个节点对象(构造函数)的实例,该实例执行一些制表操作并创建“/n”换行符 ObjTree是一个复杂的对象,它包含一个HTML结构,子元素包含其他子元素的数组 var foo = fun
var foo = function(objTree, level) {}
在这个函数中,我必须递归地遍历“objTree”,并创建一个节点对象(构造函数)的实例,该实例执行一些制表操作并创建“/n”换行符
ObjTree是一个复杂的对象,它包含一个HTML结构,子元素包含其他子元素的数组
var foo = function(objTree, level) {
if (!objTree || !objTree.children) {
if(objTree.type === "text" && objTree.data.length > 0){
jadeNodesArr.push(objTree.data);
}
return;
}
objTree.children.forEach(function(child){
singleNodesObj = new Node(objTree.name, level, objTree.data);
test = singleNodesObj.toString();
jadeNodesArr.push(test);
foo(child, level +1);
});
}
我的问题是这个递归函数不能正常工作,回调中使用的“child”对象不能正确输出。我使用递归函数循环子元素(数组)的对象树的目的是否错误 如注释中所述,您的示例中没有递归调用 递归函数调用自身 下面是一个人为设计的函数如何工作的示例,递归地读取树
// Given a root node, this function
// will recursively process the whole tree
function processTree(tree) {
if (typeof tree === 'object') {
// We expect trees to be objects
// with left and right branches.
//
// These are *recursive* calls,
// we continue to process sub-trees
// in the same way we process the root tree.
processTree(tree.left);
processTree(tree.right);
} else {
// This is a leaf.
// We're not processing a tree anymore.
// This is the end of recursion, no more
// recursive calls.
console.log(tree);
}
}
// Just an example tree
var root = {
left: {
left: 1,
right: {
left: 2,
right: 3
},
},
right: {
left: {
left: 4,
right: 5
},
right: 6
}
};
processTree(root);
// prints 1 2 3 4 5 6
你所说的递归函数不能正常工作是什么意思?你能给出一些示例输入和预期输出吗?实际上我没有看到任何“递归函数”。有一个匿名函数和
foo
,它是emptyno recursive call在您的示例中。我已经更新了代码,以便您可以看到递归函数。您是否使用了调试器来查找代码的行为?