Javascript / D3.JS - 将CSV列项目转换为JS列表

时间:2014-01-31 01:37:20

标签: javascript csv d3.js

我的CSV文件包含4个字段:

  

地址,经度,纬度,几何体
  1,2,3,4   -5,6,7,8-

我想创建一个只选择“几何”字段的列表。

这会给我们整个清单吗?

d3.csv("file.csv", function(collection) {
..

var mydata=collection.geometry;

..
});

3 个答案:

答案 0 :(得分:3)

要从对象列表中提取单个属性,可以使用map方法,如下所示:

var temp = "Address,longitude,latitude,geometry\n"+
"1,2,3,4\n5,6,7,8\n2,3,4,5\n6,7,8,9";

var t = d3.csv.parse(temp);
console.log(t.map(function(d){return d.geometry;}));

Demo Fiddle

答案 1 :(得分:1)

假设您有一个http服务器为包含以下两个文件的目录提供服务:

您可以定义自定义函数来解析行的字段。基准对象包含行中相应字段的所有值。只需访问数据的字段名称,即可返回其属性映射到行内值的对象。

所以你可以按如下方式定义你的功能

示例CSV:

field1,field2,field3
value1,value2,value3
value4,value5,value6

您可以传递的匿名函数:

function(datum,index)
{
    var collectionObject = {};
    collectionObject.someFieldName  = datum.field2,
    collectionObject.anotherFieldName = datum.field3

    return collectionObject;
}

在您的情况下,您将执行以下操作:

<强> test.csv

address,longitude,latitude,geometry
"This","is","an","example"
"This","is","an","example"
"This","is","an","example"
"This","is","an","example"
"This","is","an","example"
"This","is","an","example"
"This","is","an","example"

<强>的index.html

<!DOCTYPE html>
<meta charset="utf-8">

<head>

</head>
<body>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
  <script>

    var csv =  d3.csv("test.csv", function(d) 
        {
          return {geometry : d.geometry};
        }, 
        function(error, rows) 
        {
            console.log(rows);
        });

    console.log(csv);
  </script>
</body>
</html>

答案 2 :(得分:0)

如果几何图形是csv文件中的一列,则不能直接从d3.csv函数的结果中选择它。 d3表读取函数创建的数据对象是表示 csv文件的每行的对象的数组

所以对于csv文件 地址,经度,纬度,几何 123 Main St,90,50,几何字符串A. 22百老汇,92,51,几何字符串B

输出

[
 { "Address":"123 Main St", 
   "longitude":"90",  
   "latitude":"50",  
   "geometry":"geometry string A"},
 { "Address":"22 Broadway",  
   "longitude":"92",  
   "latitude":"51",  
   "geometry":"geometry string B"}
]

要获取仅包含几何字符串的单个数组,可以使用array mapping function

d3.csv("file.csv", function(collection) {
   ...

   var mydata=collection.map( function(d){return d.geometry;} );

   ...
});

现在mydata是一个字符串数组,仅代表csv文件的“几何”列。


P.S。我刚看到@ arete的回答。除了映射是在读取文件的同时完成,并且只有一列传递给回调函数之外,它的工作方式大致相同。 (虽然注意它仍然作为一个对象数组返回,而不是一个字符串数组。)

如果您没有使用文件中的任何其他数据,对于大型数据集可能会稍微快一些。但是,对于此版本,如果您需要将其用于程序的其他部分,则仍可以访问完整的数据集。