【问题标题】:Json d3 access each objectJson d3 访问每个对象
【发布时间】:2013-07-01 17:10:07
【问题描述】:
{
 "name": "Max",
 "value": 107,
 "children": [
  {
   "name": "Don",
   "value": 60,
   "children" [
     {"name": "CC", "value": 25},
     {"name": "Jim", "value": 35}
     ]
     },
  {
   "name": "David",
   "value": 47,
   "children": [
       {"name": "Jeff", "value": 32},
       {"name": "Buffy", "value": 15}
    ]
   }
  ]
 }

如何使用 d3 访问最里面的子名称?

我试过了:

.text(function (d) { return d.children ? null : d.name; });

但它没有工作....

当我这样做时

.text(function (d) { return d.name });

它只显示外部循环的名称 --> Don, David。

d3.json('flare.json', function (data) {

  var canvas = d3.select('p1')
             .append('svg')
             .attr('width', 800)
             .attr('height', 800)

  var color = d3.scale.category20c();

  var data1 = data.children;

  canvas.selectAll('text')
              .data(data1)
              .enter()
              .append('text')
                 .attr('x', function (d) { return 2; })
                 .attr('y', function (d, i) { return i * 15; })
                 .attr('fill', 'black')
                 .style('font-size', '12px')
                 .text(function (d) { return d.children ? null: d.name; })

我之前的数据↓↓

{
"name": "Don",
"value": 75,
"children" [
           {"name": "CC", "value": 25},
           {"name": "Jim", "value": 35}
   ]
}

当数据采用这种单嵌套格式时,我的代码运行良好,但是当我对其进行双重嵌套时,它不再工作

【问题讨论】:

  • 你能把剩下的代码贴出来吗?

标签: d3.js


【解决方案1】:

为此你需要一个递归函数 --

function getNames(d) {
    return d.children ? d.children.map(getNames) : d.name;
}

这将返回一个嵌套列表,其中包含没有子元素的元素的名称。

【讨论】:

  • 嘿,这行得通,但我想做的是将 .text 附加到形状上。如何获取数据,使其一个一个出现,而不是用逗号分隔的一大堆名称
  • 名称作为嵌套列表返回。也许您正在打印结果,它会自动连接条目?
  • 是的,我正在打印结果,但我希望它们按照属性打印出来,向右 2 个像素,每增加一个 i 向下 15 个像素
  • 好的,你可以把从getNames得到的数组传递给data,然后以通常的方式添加元素。
猜你喜欢
  • 2016-07-20
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多