使用d3.csvParse解析CSV后调用map报错,直接用数组却正常
排查TypeError: data.map is not a function错误原因及解决方案
兄弟,你遇到的问题根源非常明确——你把数组转成了字符串,而字符串没有map方法!
咱们拆解一下第一个代码的问题:
d3.csvParse(data)本身已经返回了一个包含解析后对象的JavaScript数组,和你第二个代码里手动定义的data结构完全一致。- 但你多做了一步
JSON.stringify(),这个方法的作用是把JS数组/对象转换成JSON格式的字符串。这时候你的data变量已经从数组变成了字符串类型,字符串当然没有map方法,所以才会抛出TypeError: data.map is not a function。
修正后的代码
把多余的JSON.stringify()去掉,直接使用d3.csvParse返回的数组即可:
var fs = require("fs"); var d3 = require("d3"); fs.readFile("test.csv", "utf8", function(error, data) { // 直接用解析后的数组,不需要转成字符串 var parsedData = d3.csvParse(data); parsedData.map((item, i) => console.log(`Hello ${item.col1} this ${item.col2} there are ${item.col3} blabla`)); });
额外小建议
你原代码里用var data = JSON.stringify(...)覆盖了回调函数里的data参数(也就是读取到的CSV文本),虽然这不是报错的直接原因,但这种变量名重复的写法很容易造成混淆,改成parsedData这类更清晰的命名会更好。
内容的提问来源于stack exchange,提问作者ulrich
相关产品推荐
相关产品推荐

