在 NodeJS 中读取 CSV
Posted
技术标签:
【中文标题】在 NodeJS 中读取 CSV【英文标题】:Reading from a CSV in NodeJS 【发布时间】:2021-02-07 22:41:25 【问题描述】:问题
createReadStream
中的 push()
函数不会将我的数据推送到数组中。
代码
let csv = require('csv-parser');
let people = [];
let final_array = [];
fs.createReadStream('people.csv')
.pipe(csv())
.on('data', (data) =>
people.push(data)
)
.on('end', () =>
console.log(people) //This prints out people fine
)
console.log(people) //This returns empty array
people.forEach((names) =>
console.log(people[names]); //absolutely no output
)
输出
[] //Output for console.log(people) outside the createReadStream
//Output for console.log people inside the createReadStream
[
username: 'rezero' ,
username: 'software' ,
username: 'planets' ,
username: 'darkseid' ,
username: 'gintama' ,
username: 'websines' ,
username: 'digital'
]
期望的输出
我只希望数据中的用户名进入我的 final_array 以执行进一步的任务。
final_array = ['rezero','software','planets','darkseid','gintama','websines','digital']
【问题讨论】:
【参考方案1】:csv 解析将异步运行,这意味着console.log(people)
(以及之后的代码)将在文件完全解析之前运行。
您可以将解析包装成一个 Promise 并等待这个 Promise(这仍然需要错误处理,但应该给您一个想法):
(async () =>
let peopleData = [];
await new Promise(resolve =>
fs.createReadStream('people.csv')
.pipe(csv())
.on('data', (data) =>
peopleData.push(data)
)
.on('end', () =>
resolve();
)
);
const finalArray = peopleData.map(data => data.username);
finalArray.forEach(name =>
console.log(name);
);
)();
【讨论】:
谢谢你,你能帮我把对象循环成所需的输出吗? 当然 - 我已经用简单的.map()
更新了答案,请检查。以上是关于在 NodeJS 中读取 CSV的主要内容,如果未能解决你的问题,请参考以下文章