1

这些天我正在使用 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以这种方式显示数据检查吗?或者实际上数据对象已经存储了重复的东西(在我的例子中是值和子数组)?如果是的话,如果这是一个巨大的数据源,那可能会很烦人。

我很确定也必须有更好的方法,请告诉我,谢谢大家!

4

0 回答 0