Javascript-遍历数组的归档对象

Javascript-遍历数组的归档对象,javascript,hierarchy,Javascript,Hierarchy,我继承了一些JavaScript代码。它基于json数据绘制一个层次结构树(使用D3版本3库)。代码是有效的。我需要做一个小的修改,但如何修改是个问题。我有一个物体叫treeData。treeData是树中节点的分层列表。每个节点都有属性,例如名称、id、深度、x、y和子节点。Children是一个数组,它指向当前节点的子节点。因此,子对象可以有子对象,可以有子对象,等等。如果我查看treeData对象,我会看到“根”节点,它有10个子对象 子数组在结构上与父数组相同。。。这显示了扩展第一个孩

我继承了一些JavaScript代码。它基于json数据绘制一个层次结构树(使用D3版本3库)。代码是有效的。我需要做一个小的修改,但如何修改是个问题。我有一个物体叫treeData。treeData是树中节点的分层列表。每个节点都有属性,例如名称、id、深度、x、y和子节点。Children是一个数组,它指向当前节点的子节点。因此,子对象可以有子对象,可以有子对象,等等。如果我查看treeData对象,我会看到“根”节点,它有10个子对象

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

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

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

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

试试这种递归方法

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

你需要递归函数来实现这一点。你到底想得到什么?这可能有助于你-@Manish-最终结果…对于层次结构中的每个对象,调用collapseNode(当前节点)@Tushar-这为我提供了所需的代码。我最终使用了遍历(o)代码段。如果你愿意提交,我会接受它作为答案。好的,我在这里提交!我无法获取行…(treeData.children | |[])。forEach(function(chidNode){…遍历。它似乎只调用当前节点和其中一个子节点。..@user1009073您能为
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]);
        }
    }
}