相关疑难解决方法(0)

D3:使用嵌套函数将父键的平面数据转换为层次结构

我确信有一个非常简单的优雅方式来做到这一点,但我无法弄明白.我有一些看起来像这样的输入数据:

[
{id: 1, name: "Peter"},
{id: 2, name: "Paul", manager: 1},
{id: 3, name: "Mary", manager: 1},
{id: 4, name: "John", manager: 2},
{id: 5, name: "Jane", manager: 2}
]
Run Code Online (Sandbox Code Playgroud)

如果可能,我想使用d3.js嵌套操作符来获取在层次结构布局中使用的结构.像这样:

[ 
   {name: "Peter", children: [
          {name:"Paul", children: [
              {name:"John"},
              {name:"Jane"}
          ]},
          {name:"Mary"}
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

javascript json nested operators d3.js

8
推荐指数
1
解决办法
6149
查看次数

D3.js:使用d3.nest()动态添加密钥

d3.nest()用来将平面JSON文件转换为分层树。如果您事先知道数据中的级别,则此方法就很好了:d3.nest()为传递给它的每个键函数创建一个嵌套级别。

但是,我想知道是否存在一种优雅的方式来动态传递键函数。这可能是一个基本问题,但是我的Javascript技能也是基本问题。

这是使用存储在数组中的键名的静态示例:

var levels = ['first', 'second', 'third']

var root = {
    "key":"root", 
    "values": 
        d3.nest()
            .key(function(d){ return d[levels[0]] })
            .key(function(d){ return d[levels[1]] })
            .key(function(d){ return d[levels[2]] })
            .entries(data)
}
Run Code Online (Sandbox Code Playgroud)

现在,我的解决方案是一个if-else循环,该循环以伪动态方式创建不同的嵌套:

// build the nested tree pseudo-dynamically
if (levels.length === 1) {
    var nest = d3.nest()
           .key(function(d){return d[levels[0]]})
           .entries(data);
} else if (levels.length === 2) {
    var nest = d3.nest()
           .key(function(d){return d[levels[0]]})
           .key(function(d){return d[levels[1]]})
           .entries(data);
} else if (levels.length === 3) {
    var nest = d3.nest() …
Run Code Online (Sandbox Code Playgroud)

javascript json d3.js

2
推荐指数
1
解决办法
3701
查看次数

标签 统计

d3.js ×2

javascript ×2

json ×2

nested ×1

operators ×1