作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的用例是这样的:我希望在 Node 中读取 CSV 文件并仅获取标题。我不想将读取流的结果写入文件,而是在读取文件后将 header 推送到数组,这样我就可以获取该数组并稍后对其进行处理。或者,更好的是,获取流并在读取流时对其进行转换,然后将其发送到数组。文件是一个人为的值。我被困在这一点上,数据文件的当前输出是一个空数组:
const fs = require('fs');
const parse = require('csv-parse');
const file = "my file path";
let dataFile = [];
rs = fs.createReadStream(file);
parser = parse({columns: true}, function(err, data){
return getHeaders(data)
})
function getHeaders(file){
return file.map(function(header){
return dataFile.push(Object.keys(header))
})
}
为了获得我需要的结果,我需要做什么?我期望在数组中找到 header 作为最终结果。
最佳答案
好的,所以你的代码中有一些令人困惑的东西,还有一个错误:你实际上没有调用你的代码:)
首先,一个解决方案,在解析器之后添加这一行:
rs.pipe(parser).on('end', function(){
console.log(dataFile);
});
神奇的是,dataFile 不是空的。您从磁盘流式传输文件,将其传递给解析器,然后在最后调用回调。
对于令人困惑的部分:
parser = parse({columns: true}, function(err, data){
// You don't need to return anything from the callback, you give the impression that parser will be the result of getHeaders, it's not, it's a stream.
return getHeaders(data)
})
function getHeaders(file){
// change map to each, with no return, map returns an array of the return of the callback, you return an array with the result of each push (wich is the index of the new object).
return file.map(function(header){
return dataFile.push(Object.keys(header))
})
}
最后:请选择结束行是否带有 ;
,但不能混合使用 ;)
你应该以这样的方式结束:
const fs = require('fs');
const parse = require('csv-parse');
const file = "./test.csv";
var dataFile = [];
rs = fs.createReadStream(file);
parser = parse({columns: true}, function(err, data){
getHeaders(data);
});
rs.pipe(parser).on('end', function(){
console.log(dataFile);
});
function getHeaders(file){
file.each(function(header){
dataFile.push(Object.keys(header));
});
}
关于javascript - 将 NodeJS 流通过管道传输到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41002771/
我是一名优秀的程序员,十分优秀!