2013-02-21 239 views
2

我想让自己熟悉D3并且很难以正确的格式获取数据。我有一个对象数组,每个对象中都有一个“日期”键,我试图使用d3.nest按日期对它们进行分组,但是甚至无法使用该示例(从https://github.com/mbostock/d3/wiki/Arrays获取)。我已经淡化了它的基本要素,但是代码是从d3 wiki中取得的。将数据嵌套到D3.js中

var yields = [{yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"}, 
       {yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"}, 
       {yield: 27.43, variety: "Manchuria", year: 1932, site: "Morris"}] 

var nest = d3.nest() 
    .key(function(d) { return d.year; }) 
    .entries(yields); 

根据维基,这应该组织数据的结构如下:

[{key: 1931, values: [ 
    {yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"}, 
    {yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"}]}, 
{key: 1932, values: [ 
    {yield: 27.43, variety: "Manchuria", year: 1932, site: "Morris"}]} 
] 

但使用console.dir(yields)检查时,我得到了相同的扁平结构,使用d3.nest之前。由于我甚至无法从文档工作中获得示例,因此我不知道接下来要尝试什么。帮助noob出来?

回答

8

你想看看nest而不是yieldsyields是你通过的并且nest是你得到的。 yields不会更改。

D3的维基可以在一个更可读的方式有书面的东西:

var nest = d3.nest() 
    .key(function(d) { return d.year; }) 

var nested = nest.entries(yields); 

现在,nest是一个对象,你可以重复使用同一年键类似的数据,并nested是一个yields的输出。 key函数返回嵌套对象本身,但entries返回新的嵌套数据。