我正在使用d3.nest()
将平面JSON文件转换为分层树。如果您事先知道数据中发现的级别,那么这很好:d3.nest()
会为您传递的每个关键函数创建一个嵌套级别。D3.js:使用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)
}
我的解决方案,现在是一个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()
.key(function(d){return d[levels[0]]})
.key(function(d){return d[levels[1]]})
.key(function(d){return d[levels[2]]})
.entries(data);
}
[...]
是有一个优雅的方式动态传递密钥到d3.nest()
?我想要的是原则上的东西,如下面的示例(哪个不起作用):
var root = {
"key":"root",
"values":
d3.nest()
for (var i = 0; i < levels.length; i++) {
.key(function(d){return d[levels[i]]})
}
.entries(data)
}
感谢您的时间!
听起来像嵌套是不是在这里正确的事情。 [这个问题](http://stackoverflow.com/questions/20913689/complex-d3-nest-manipulation)可能会有所帮助。 –