私は最近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 })
最終的には必要なツリーが表示されますが、データを調べると、最上位 (「ルート」) の下に各データ オブジェクトが表示されます。
//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]はどうですか? 明示的に子キーにロールを割り当てたので、実際には他のものと同じ意味です
今の質問は: これはクロムがこのようにデータ検査を表示するからですか? または実際にはデータオブジェクトに重複したものが保存されています(私の場合は値と子配列)? はいの場合、これが巨大なデータ ソース用であると煩わしい場合があります。
より良い方法もあるに違いないと確信しています。アドバイスをお願いします。