【发布时间】:2021-01-16 15:54:15
【问题描述】:
我有一个 CSV 文件,每行有 100 个名称。我想创建一个包含每个名称的数组。目前,我的 CSV 文件如下所示:
Names
Bob
Joe
Tim
Allan
我想按如下方式填充数组:
const csv = require('csv-parser');
const fs = require('fs');
const names= [];
fs.createReadStream('./Names.csv')
.pipe(csv())
.on('data', (data) => names.push(data.Names))
.on('error', (error) => loggingService.getDefaultLogger().error(error))
.on('end', () => loggingService.getDefaultLogger().info("Array of Names:" + names));
使用我创建的日志记录服务,我可以看到 CSV 中的所有名称。当我执行 console.log(names) 时,我得到一个空数组。可能有人知道这是为什么吗?更具体地说,有没有更好的方法从 CSV 文件中读取,以便我可以用该文件的内容填充字符串数组,每行 1 个数组条目作为字符串?
【问题讨论】:
-
我想知道你的 console.log() 语句在哪里?如果在呈现代码之后 - 是的,名称将为空,因为读取是异步的,并且您进入控制台的速度比从文件中读取完成的速度更快
-
我对CSV库不熟悉,但是在下面的sn-p中,
devices是从哪里来的?(data) => devices.push(data.Names) -
@bensiu 在代码sn-p之后。如果我想遍历名称数组并对其进行处理,我将如何克服异步读取?理想情况下,我想填充数组,然后在数组中执行一个 forEach 元素,创建一个新对象。在此之前 forEach 我不确定 names 数组是否已满。
-
@Hassan 这是一个错字。它应该是:names.push(data.Names)。
标签: javascript csv fs read.csv