这些天我和d3js一起玩,试图在这里有意义:
最初,我有一个实际上有这个内容的json数据文件:
[{name:one, role:admin, accessLevel:0},{name:two, role:user,accessLevel:1},{name:three,role:guest,accessLevel:2}]
因此,为了使这些数据有效,我用根包装了原始数据。同样在我的设计中,我希望数据先用'accessLevel'排序,然后用'role'
排序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
这样值:Array [1] 是存储role = admin的子对象的位置,但 children:Array [1] 怎么样?它实际上意味着与另一个相同,因为我明确指定了儿童键是角色
现在的问题是:这是因为chrome以这种方式显示数据检查?或者实际上数据对象存储了重复的东西(在我的情况下是值和子数组)?如果是的话,如果这是一个庞大的数据源,那可能会很烦人。
我非常肯定必须有更好的方法,请告诉我,谢谢大家!