这些天我正在使用 d3js,试图在这里理解:
最初,我有一个实际包含以下内容的 json 数据文件:
[{name:one, role:admin, accessLevel:0},{name:two, role:user,accessLevel:1},{name:three,role:guest,accessLevel:2}]
所以为了使这些数据有效,我用根包装了原始数据。同样在我的设计中,我希望数据首先按“accessLevel”排序,然后按“角色”排序
var treeData = {}
d3.json(url,function(source){
var sortedTree = d3.nest()
.key(function(d) { return d.accessLevel })
.key(function(d) { return d.role})
.entries(source)
treeData['root'] = sortedTree
})
// I now have a json data source like:
// {root : [{...},{...},{...}]
// and it was sorted off step 2
我打算制作一个树状图,我明确定义了我的数据的孩子:
var tree = d3.layout.tree()
.children(function(d) { return d.root?d.root : d.values })
最终我可以看到我想要的树但是当我检查数据时,我可以看到顶层('root')下的每个数据对象
//from chrome developer console, just take 1 data object as example
Object {root: Array[3], x0: 1730}
root: Array[3]
0: Object
children: Array[1]
depth: 1
key: "1"
parent: Object
values: Array[1]
x: 187.48768472906406
x0: 187.48768472906406
y: 261.3333333333333
y0: 261.3333333333333
__proto__: Object
...
我理解结构就像
root -> accessLevel = 0 -> role=admin
所以values:Array[1]是存储有 role=admin 的子对象的位置,但是children:Array[1]呢?它实际上与另一个含义相同,因为我明确分配了 children 键是角色
现在的问题是:这仅仅是因为chrome以这种方式显示数据检查吗?或者实际上数据对象已经存储了重复的东西(在我的例子中是值和子数组)?如果是的话,如果这是一个巨大的数据源,那可能会很烦人。
我很确定也必须有更好的方法,请告诉我,谢谢大家!