【发布时间】:2014-03-19 16:53:58
【问题描述】:
我正在使用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)
}
我现在的解决方案是一个伪动态创建不同嵌套的 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)
}
感谢您的宝贵时间!
【问题讨论】:
-
听起来嵌套在这里不是正确的事情。 This question 可能会有所帮助。
标签: javascript json d3.js