javascript - 使用字典作为D3数据源

标签 javascript d3.js

我想使用此数据(如下)作为 d3.js 程序的数据源:

{
  "component": {
    "name1": {
      "graphname": {
        "title": "foo",
        "data": [
          {"data": "DATE IN ISOFORMAT", "value": 5},
          {"data": "DATE IN ISOFORMAT", "value": 10}
          ]
      }
    },
    "name2": {
      "graphname": {
        "title": "foo",
        "data": [
          {"data": "DATE IN ISOFORMAT", "value": 5},
          {"data": "DATE IN ISOFORMAT", "value": 10}
          ]
      }
    }
  }
  "component2": {...
}

D3 只接受数组数据?我如何操纵它来工作?

我想为所有组件绘制由“名称”聚合的任何“graphname”的图表

有什么建议吗?

最佳答案

D3 不仅仅接受数组作为数据源,但出于循环目的,数组比 JavaScript 对象(“dict”)方便得多。不过,有一种非常简单的方法可以将对象转换为数组。如果上面的对象被称为d,那么可以使用以下命令创建其相应的数组:

var dlist = d3.entries(d);

现在 dlist 将类似于:

[ { key: 'component',
    value: { name1: ..., name2: ... } },
  { key: 'component2',
    value: { name1: ..., name2: ... } } ]

原始字典已被重新映射为“记录”数组,每个“记录”都有对。这种“记录数组”模式在 D3 工作和 JavaScript 中非常常见。如果您需要循环子结构(例如 name1name2、... 值,d3.entries 可以应用于原始结构的多个级别,因为需要进行这些字典到列表的转换。

由于这个答案在评论中被指出是错误的,here's a working example使用对象(“dict”)作为 D3 程序的数据源:首先在一个简单的循环中,然后使用惯用的 d3 .data(...).enter() 管道。

关于javascript - 使用字典作为D3数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42717081/

相关文章:

javascript - (Phonegap应用程序)如何在jQuery Mobile中的两个页面中传递输入搜索的值

javascript - d3.js:强制布局仅适用于圆形吗?

javascript - 更改 D3 分组图表中 x 轴(序数)刻度值的值

d3.js - D3 转换不起作用

javascript - 防止小书签生成多个事件监听器

javascript - 在php中剩余时间结束后如何隐藏或禁用文本框

javascript - d3分组条形图创建问题

javascript - d3面积图未显示

javascript - 使用 Jquery 选择所有旁边

javascript - window.scroll 函数和删除类的奇怪行为