Javascript,通过对象树循环?

时间:2015-10-29 16:12:43

标签: javascript json object tree

我对递归函数有疑问。我有一个对象树,我必须通过递归循环并进入水平,一些对象属性有子数组等等。

我有一个函数,我得到对象树和级别(从一开始就是0)作为参数如下:

   var foo = function(objTree, level) {}

在这个函数中,我必须循环遍历“objTree”并创建一个Node对象(构造函数)的实例,它执行一些Tab键并创建“/ 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”对象确实正确输出。我使用递归函数错误的目的是循环使用子元素(数组)的对象树???

1 个答案:

答案 0 :(得分:1)

如评论中所述,您的示例中没有递归调用。

递归函数调用自身

这是一个人为的示例,说明函数可能如何工作,递归地读取树。

// 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