gpt4 book ai didi

javascript - D3.stratify 未捕获错误 : ambiguous: Distributive property

转载 作者:行者123 更新时间:2023-11-30 20:11:43 27 4
gpt4 key购买 nike

我正在尝试根据 this example 创建一个可折叠的树.我的数据包含大约 350,000 行。我将数据转换为 JSON 文件,当我使用几行测试脚本时,一切正常。

但是如果我使用整个文件,我会得到错误:Uncaught Error: ambiguous: Distributive property 位于将输入数据分层并形成层次结构的行。我的代码与示例非常相似,但我正在读取 JSON 文件,而示例将对象数组分配给变量。我在下面给出了代码片段。

d3.json("fields_of_study_with_names.json", function(error, inputdata) {
if (error) throw error;
console.log(inputdata);
var treeData = d3.stratify()
.id(function(d) { return d.child; })
.parentId(function(d) { return d.parent; })
(inputdata);

// assign the name to each node
treeData.each(function(d) {
d.name = d.data.child;
});
...

我做了一些预处理并删除了包含 NaN 和重复行的行(我认为重复行导致了这个错误)。我可以看到代码工作正常(因为我检查了一个较小的文件),所以这显然是输入数据的问题。但我不明白错误的意思。有人可以帮助我吗?

PS:我的数据经过预处理后是这样的。层次结构由 6 个级别组成,最高级别是“根”。

[
{
"child": "root",
"parent": ""
},
{
"child": "Geology",
"parent": "root"
},
{
"child": "Art",
"parent": "root"
},
...
]

最佳答案

查看 d3 source code ,我相信你的问题是你的数据中有非唯一的 child 。来自docs , .id 必须返回一些独特的东西:

The returned string is then used to identify the node’s relationships in conjunction with the parent id. For leaf nodes, the id may be undefined; otherwise, the id must be unique. (Null and the empty string are equivalent to undefined.)

此外,错误告诉您您的非唯一 ID 是值 Distributive property

评论编辑

对于@rioV8 的观点,我会将代码修改为:

var counts = {};
var treeData = d3.stratify()
.id(function(d) {
if (!counts[d.child]){
counts[d.child] = 1;
return d.child;
} else {
return d.child + " " + ++counts[d.child];
}
})
.parentId(function(d) { return d.parent; })
(inputdata);

关于javascript - D3.stratify 未捕获错误 : ambiguous: Distributive property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52335987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com