d3.csvParse无法正确读取字符串

时间:2018-04-30 06:26:38

标签: javascript d3.js

我有一个SVG来提供CSV格式的数据。我正在使用d3.js 4.13.0。我遇到过这样的问题:

我的csv变量$ajax_data如下所示:

date,value
1524805006,1234
1524805012,1235
1524805018,1236
...

当我将变量放入解析函数时:

d3.csvParse(ajax_data, type, function(error, data){
  console.log(data);
  if (error) throw error;
  ...
  [more processing]
  });

我的访问者功能类型定义如下:

function type(d){
  d.date = parseDate(d.date);
  d.value = +d.value;
  return d;
}

var parseDate =d3.timeParse("%s");

当我执行上面的解析函数时,没有任何响应,甚至没有来自console.log(data)

即使我将变量转换为字符串也不行:

d3.csvParse(JSON.stringify(ajax_data), type, function(error, data){
  console.log(data);
  if (error) throw error;
  ...
  [more processing]
  });

仍然没有回应...

因此,我使用$ajax_data中的相同数据进行了测试,并将其放入csv普通文件中,并使用以下解析方法:

d3.csv("ajax_data.csv", type, function(error, data){
  console.log(data);
  if (error) throw error;
  ...
  [more processing]
  });

它没有任何问题,我有完整的数组:

[
  {date:xxxx,value:yyyy},
  {date:xxxx,value:yyyy},
  {date:xxxx,value:yyyy},
  ...
]

任何了解d3.csvParse功能的人都可以告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

d3.csv不同,d3.csvParse不需要回调。

它接受一个,因为这是JavaScript:一个函数可以有多个参数而不是参数或参数多于参数......你的代码不会抛出任何错误,因为附加的参数 - 回调 - 只是被忽略了。

所以,应该只是:

var data = d3.csvParse(ajax_data, type);

console.log(data)

//more processing, etc...

这是一个包含您的代码/数据的演示:



var ajax_data = `date,value
1524805006,1234
1524805012,1235
1524805018,1236`;

var parseDate = d3.timeParse("%s");

var data = d3.csvParse(ajax_data, type);

console.log(data)

function type(d) {
  d.date = parseDate(d.date);
  d.value = +d.value;
  return d;
}

<script src="https://d3js.org/d3.v5.min.js"></script>
&#13;
&#13;
&#13;