Javascript - 遍历数组的Hiarchial对象

时间:2017-11-29 13:59:15

标签: javascript hierarchy

我有一些我继承的JavaScript代码。它基于json数据绘制分层树(使用D3版本3库)。代码有效。我需要做一个小修改,但如何进行修改就是问题所在。我有一个名为treeData的对象。 treeData是树中节点的分层列表。每个节点都有属性,例如name,id,depth,x,y和children。 Children是一个数组,指向当前节点的子节点。所以孩子可以有孩子,可以有孩子等。如果我看看treeData对象,我会看到'root'节点,我看到它有10个孩子。

enter image description here

children数组在结构上与父类相同...这显示了扩展第一个孩子,我看到它有3个孩子。我的数据通常是3-4级深度。 enter image description here

我的挑战是我需要针对树中的所有节点运行一个函数。我确信有一种优雅的方式可以做到这一点,但我不知道它会是什么......我需要类似的东西..

var myNode;
for (var zz = 0; zz <= treeData.children.length; zz++) {
myNode = treeData.children[zz];
collapseNode(myNode);
}

问题是,这只是在一个级别,而不是遍历层次结构......如何重写它以访问层次结构中的每个节点?

3 个答案:

答案 0 :(得分:1)

试试这个 -

function traverse(o) {
    for (i in o) {
        // if o is an object, traverse it again
        if (!!o[i] && typeof(o[i])=="object") {
            console.log(i, o[i])
            traverse(o[i]);
        }
    }
}

答案 1 :(得分:0)

function traverse(array){
  for(const obj of array){
     //do whatever with obj, than go deeper
     traverse(obj.children);
  }
}

如果你通过递归深入,这很简单。

答案 2 :(得分:0)

尝试这种递归方法

std_dev()