【发布时间】:2018-02-07 21:56:57
【问题描述】:
我有分层数据用于在我的应用程序中创建 svg。我需要找到该数据源中最长链的长度。我可以逐级遍历数据源,递归地深入其中读取_children,调用递归函数来计算级别,但我相信一定有更好的方法。这更加复杂,因为数据源可以从它以 _children 和 _parents 开始的节点开始双向。
var findChildren = function (ds, level) {
if (!ds._children || ds._children.length == 0) {
return level;
}
var longest = level + 1;
ds._children.forEach(function (item) {
var result = findChildren(item, level + 1);
if (result > longest) {
longest = result;
}
});
return longest;
}
这是我目前使用的函数,有一个相同的函数检查ds._parents 以另一种方式,将一个结果作为另一个的起始级别传递。我只是确定一定有更好的方法......
例如,相同的数据可能有三种方式,具体取决于用户从何处打开树。
{"number":1,"type":"Delivery","_parents":[{"number":1,"type":"Order","_parents":[{"number":1,"type":"Quote"}]}]}{"number":1,"type":"Order","_parents":[{"number":1,"type":"Quote"}], "_children":[{"number":1,"type":"Delivery"}]}{"number":1,"type":"Quote","_children":[{"number":1,"type":"Order","_children":[{"number":1,"type":"Delivery"}]}]}
【问题讨论】:
-
你能分享一下“分层数据”吗?
-
"但我相信一定有更好的方法。"你为什么这么肯定?
-
deepest是longest的拼写错误吗?如果不是,它来自哪里? -
@ScottSauyet 是的,在我意识到我需要双向进行之前,我把它写成最深的最深层次,所以把它改成在两个方向上都更有意义的东西,最长。
-
我重新打开了这个问题,因为这不完全是重复的:这个问题有 d3.js 标签,而 D3 有特定的方法。
标签: javascript d3.js hierarchy