Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript,在对象树中循环?_Javascript_Json_Object_Tree - Fatal编程技术网

Javascript,在对象树中循环?

Javascript,在对象树中循环?,javascript,json,object,tree,Javascript,Json,Object,Tree,我有一个关于递归函数的问题。我有一个对象树,我必须递归地循环,并进入到一些对象属性有子数组等的级别 我有一个函数,用于获取对象树和级别(从一开始就是0)作为参数,如下所示: var foo = function(objTree, level) {} 在这个函数中,我必须递归地遍历“objTree”,并创建一个节点对象(构造函数)的实例,该实例执行一些制表操作并创建“/n”换行符 ObjTree是一个复杂的对象,它包含一个HTML结构,子元素包含其他子元素的数组 var foo = fun

我有一个关于递归函数的问题。我有一个对象树,我必须递归地循环,并进入到一些对象属性有子数组等的级别

我有一个函数,用于获取对象树和级别(从一开始就是0)作为参数,如下所示:

   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在您的示例中。我已经更新了代码,以便您可以看到递归函数。您是否使用了调试器来查找代码的行为?