我的帖子在某种程度上是对这个问题的跟进:D3 - 如何处理 JSON 数据结构?
简而言之,我在处理复杂的嵌套 JSON 结构时遇到了麻烦。让我举一个简单的例子(反映上面的链接)来说明:
var regularData = [[40,20,30,24,18,40],
[24,20,30,41,12,34]];
var myTable = d3.select("body").append("table")
.selectAll("tr")
.data(regularData, function(d) {
return d;
})
.enter()
.append("tr")
.selectAll("td")
.data(function(d) {
return d;
})
.enter()
.append("td")
.text(function(d) {
return d;
});
正如 D3 的文档已经显示的那样,这会产生两行数字,正如预期的那样。
但是如果我用这个替换regularData:
var newData = [{"user":"jim","scores":[40,20,30,24,18,40]},
{"user":"ray","scores":[24,20,30,41,12,34]}];
并将 myTable 的构造线 3 到 5 调整为:
.data(newData, function(d) {
return d.scores;
})
我本来希望循环输入每个用户的分数。相反,第二个数据子句仍然绑定到顶级对象(即具有属性“user”和“scores”)。
一种蛮力方法是将我的数据转换为适合每个目的的普通“数组数组”。但也许我错过了一些东西,更优雅的方式是可能的?
预先感谢您的帮助,P。