我有一些我继承的JavaScript代码。它基于json数据绘制分层树(使用D3版本3库)。代码有效。我需要做一个小修改,但如何进行修改就是问题所在。我有一个名为treeData的对象。 treeData是树中节点的分层列表。每个节点都有属性,例如name,id,depth,x,y和children。 Children是一个数组,指向当前节点的子节点。所以孩子可以有孩子,可以有孩子等。如果我看看treeData对象,我会看到'root'节点,我看到它有10个孩子。
children数组在结构上与父类相同...这显示了扩展第一个孩子,我看到它有3个孩子。我的数据通常是3-4级深度。
我的挑战是我需要针对树中的所有节点运行一个函数。我确信有一种优雅的方式可以做到这一点,但我不知道它会是什么......我需要类似的东西..
var myNode;
for (var zz = 0; zz <= treeData.children.length; zz++) {
myNode = treeData.children[zz];
collapseNode(myNode);
}
问题是,这只是在一个级别,而不是遍历层次结构......如何重写它以访问层次结构中的每个节点?
答案 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()