Node.js使用ya-csv解析CSV为JS对象后读取id返回undefined如何解决
问题核心原因
- 变量命名冲突:你在
data事件的回调函数里将行数据参数命名为data,和全局用来存储所有解析结果的数组data重名了,函数作用域内的变量优先级更高,因此你写的data.push(data)根本没有把行数据存入全局数组,反而是尝试往当前行对象里插入数据,全局数组一直是空的,自然读取不到id属性。 - 函数未调用:原代码只定义了
csvToJson解析函数,没有主动调用,解析逻辑不会执行,也会导致读取不到数据。 - 可选优化:你的CSV表头行末尾多了一个多余的分号,可能会生成一个空字符串的多余键,建议删除避免后续异常。
修复后代码
const csv = require('ya-csv'); const data = []; const file = 'myFile.csv'; function loopForPrint() { for (var i = 0; i < data.length; i++) { let id = data[i].id; console.log(id); } } function csvToJson() { // 把回调的参数名改成row,避免和全局的data数组重名 var reader = csv.createCsvFileReader(file, {columnsFromHeader: true, 'separator': ';'}); reader.addListener('data', function(row) { data.push(row); loopForPrint(); }) reader.addListener('end', function() { console.log('end'); // 也可以选择在end事件统一打印所有数据,避免每读一行就循环一次 // loopForPrint(); }); }; // 主动调用启动解析 csvToJson();
运行效果
修复后执行代码会依次打印1、2,最后输出end,可以正常取到每行的id属性。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

