Javascript - 遍历数组的分层 object

Javascript - Traversing Hiarchial object of Arrays

我继承了一些 JavaScript 代码。它根据 json 数据绘制层次树(使用 D3 版本 3 库)。该代码有效。我需要做一个小的修改,但是如何修改是个问题。我有一个名为 treeData 的 object。 treeData 是树中节点的分层列表。每个节点都有属性,例如 name、id、depth、x、y 和 children。 Children是一个数组,指向当前节点的child个节点。所以 children 可以有 children,可以有 children,等等。如果我查看 treeData object,我会看到 'root' 节点,并且我看到它有 10 children.

children数组在结构上与parent相同...这显示扩展了第一个child,我看到它有3个child仁。我的数据通常有 3-4 层深。

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

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

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

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

如果你通过递归深入,那就很简单了。

试试这个递归方法

function processNode(node)
{
    collapseNode(myNode); //logic for current node
    (treeData.children || []).forEach( function( chidNode ){
       processNode( chidNode ); //if there are children invoke the same method for each child node
    });
}
processNode( treeData ); //invoke for your treeData

试试这个 -

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]);
        }
    }
}