如何跳过csv中的标头并解析列?

时间:2019-01-12 06:03:16

标签: javascript node.js csv

let csv = require('fast-csv');
let fs = require('fs');
let readFileStream = fs.createReadStream(csvPath).setEncoding('utf-8');
let insList = [];
csv
    .fromStream(readStream, {headers: true})
    .on('data', function (data) {
        if (data[1] !== '' && insList.indexOf(data[1]) === -1 )
            insList.push(data[1]);

    })
    .on('end', function () {
        console.log(insList);
        console.log('done');
    })

当将console.log(instList)作为参数传递给undefined时,{headers:true}行给出csv.fromStream。为什么会发生这种情况,我该如何解决?

如果未将{headers:true}作为参数传递,则insList数组将给出列名以及该列中的所有其他唯一元素。 我希望insList数组容纳列1的所有唯一项(即data[1])。

1 个答案:

答案 0 :(得分:1)

我发现它工作正常。但是,唯一的问题是数据是对象而不是数组。我已经对此csv进行了测试。

title,count
a,1
b,2


c,3
d,4

数据是一个格式为{title:'a',count:'1'}的对象。

const csv = require('fast-csv');
const fs = require('fs');

const readStream = fs.createReadStream('./test.csv').setEncoding('utf-8');
const insList = [];
csv
  .fromStream(readStream, { headers: true, ignoreEmpty: true })
  .on('data', function (data) {
    console.log('data === ', data);
    // major change is here
    if (data && data !== {}) insList.push(data);
    else console.log('empty data', data);
  })
  .on('end', function () {
    console.log('end => ', insList);
    console.log('done');
  })

希望这会有所帮助