遍历模型树的任何辅助方法?
Any helper methods for walking through the model tree?
我需要遍历模型树并在每个节点执行一些业务逻辑,我想知道是否有任何辅助方法可以帮助我在节点中移动。例如广度优先搜索或深度优先搜索,甚至是获取节点子节点和父节点的简单方法?
查找叶节点的方法也会很有帮助。
(如果可能的话,如果这些在 javascript 而不是 ES6 中提供,我知道 Phillipe Leefsma 有一篇博客文章,其中有一段用于查找叶节点的代码,但它在 ES6 中而且我似乎无法将其转换回 Javascript)
非常感谢任何帮助。
给定实例树和节点获取所有子节点的方法是
instanceTree.enumNodeChildren(node, callback)
其中所有子 dbids 都在回调中。
要遍历树,首先获取instancee树和根id:
var instanceTree = viewer.model.getData().instanceTree;
var rootId = this.rootId = instanceTree.getRootId();
那么最好的方法就是使用广度优先搜索:
function getAlldbIds (rootId) {
var alldbId = [];
if (!rootId) {
return alldbId;
}
var queue = [];
queue.push(rootId);
while (queue.length > 0) {
var node = queue.shift();
alldbId.push(node);
instanceTree.enumNodeChildren(node, function(childrenIds) {
queue.push(childrenIds);
});
}
return alldbId;
}
您可以修改您的方法以优化性能。
我需要遍历模型树并在每个节点执行一些业务逻辑,我想知道是否有任何辅助方法可以帮助我在节点中移动。例如广度优先搜索或深度优先搜索,甚至是获取节点子节点和父节点的简单方法?
查找叶节点的方法也会很有帮助。
(如果可能的话,如果这些在 javascript 而不是 ES6 中提供,我知道 Phillipe Leefsma 有一篇博客文章,其中有一段用于查找叶节点的代码,但它在 ES6 中而且我似乎无法将其转换回 Javascript)
非常感谢任何帮助。
给定实例树和节点获取所有子节点的方法是
instanceTree.enumNodeChildren(node, callback)
其中所有子 dbids 都在回调中。
要遍历树,首先获取instancee树和根id:
var instanceTree = viewer.model.getData().instanceTree;
var rootId = this.rootId = instanceTree.getRootId();
那么最好的方法就是使用广度优先搜索:
function getAlldbIds (rootId) {
var alldbId = [];
if (!rootId) {
return alldbId;
}
var queue = [];
queue.push(rootId);
while (queue.length > 0) {
var node = queue.shift();
alldbId.push(node);
instanceTree.enumNodeChildren(node, function(childrenIds) {
queue.push(childrenIds);
});
}
return alldbId;
}
您可以修改您的方法以优化性能。