2014-11-24 162 views
0

用这种方式挣扎,并且有红色的所有类似问题。d3将对象转换为数组

我正在使用d3库读取网页上的csv。

我目前有这样的:

d3.csv("normal.csv", function(rows) { 
    doSomethingWithRows(rows); 
    }); 

    function doSomethingWithRows(rows) { 
    // do something with rows 
    console.log(rows); 
} 

此输出我:

对于所有行

- 每个索引作为对象(每行是一个对象)-an阵列

所以它的数组与对象。

我想要的是一个数组的数组,所以我可以引用像2D数组的东西。

我看着jquery-csv,但没有帮助转换为数组数组。也看着d3.csv.parser,但它也没有帮助。

任何想法

+0

'$ .csv.toArrays(CSV)'在[jQuery的CSV文件(https://code.google.com/p/jquery-csv/)看起来像你在找什么。 – 2014-11-24 04:30:08

+0

但事情是“csv”需要一个字符串。只有d3(我可以找到)可以在加载网页时加载csv文件。 – random12345 2014-11-24 04:31:47

+0

为什么你不能将对象数组转换为数组?有没有一些限制可以阻止你这样做? – Hrishi 2014-11-24 04:37:57

回答

2

有几种方法可以了解你正在尝试做什么。

  1. 每个对象都应该对应外数组内的数组,它不会改变长度。在这种情况下,您想要地图访问器函数(请参阅d3.csv的文档)。

  2. 你想保持相同数量的元素,但安排他们与两个指标,而不是一个。在这种情况下,我建议您将数据保存为一维数据,然后在索引中进行数学运算。 D3会在您需要时为您提供数组索引。

  3. 您想创建一个2D数组,其中每个元素从您拥有的数组中的多个对象中绘制。确切的转换取决于你想要做什么,但我会看看D3 docs for Arrays,它有助于列出顶部的一些普通JavaScript方法。特别是,请看pairszip。您还可以看看nest数据结构。如果您想要网格或矩阵,请参阅this example,特别是函数cross

  4. (回复评论)您想使用CSV本身的2D结构。你基本上已经有了这个,除了内部数据结构是键值而不是索引。这利用了CSV标题和CSV列经常是异质的并且不承认数字排序。如果你真的想要将值更改为数组,请使用map或accessor函数。除了d3.transpose,我真的不明白为什么你会想要。

这就是说,D3代码(或至少最简单的D3代码)是围绕着一维数据。你应该认真思考你是否真的需要一个二维数组。很难直接进入D3并制作自己的图表;你会做很好地阅读一些tutorials,并得到了它是如何工作的感觉,它有意见。

+0

你会知道任何其他库,我可以解析CSV数据到2D数组吗?我对图表不感兴趣,但是d3是唯一可以在加载网页时加载csv的库。 – random12345 2014-11-24 04:29:07

+0

见#4。 extrachars – mgold 2014-11-24 04:33:50