我想在节点js中创建一个函数,该函数读取某个目录中的所有文件(csv格式)并将其放在JSON数组中。 csv的内容如下所示:
命名,数量,ID,公司,日期
对象1,-500,123,a,10/9/2015
对象2,-1750,456,b,10/9/2015
对象3,500,0,c,10/10/2015
对象4,200,0,c,10/10/2015
来自JSON数组中csv的数据没有问题。
我还想在JSON数组中为所有对象添加一个新属性。 新属性称为'来源'对于所有被称为“供应商”的对象,它应该是相同的。对于每个读取的csv文件,这都不同。
JSON应如下所示:
名称,数量,ID,公司,日期,来源
对象1,-500,123,a,10/9/2015,供应商
对象2,-1750,456,b,10/9/2015,供应商
对象3,500,0,c,10/10/2015,供应商
对象4,200,0,c,10/10/2015,供应商
我尝试过data.push({'来源':'供应商'});但这不起作用。
知道我该如何解决这个问题? 另一种方法是使用循环在每个对象中添加新属性,但我想知道这是否是解决它的最有效方法。
var fs=require('fs');
var dir='./load/';
var data={};
fs.readdir(dir,function(err,files){
if (err) throw err;
var c=0;
files.forEach(function(file){
c++;
fs.readFile(dir+file,'utf-8',function(err,html){
if (err) throw err;
data=html;
**data.push({'Source': 'supplier'});** //doesn't work
if (0===--c) {
console.log(data);
}
});
});
});
我现在尝试使用循环添加新属性,但这不起作用。来源供应商给我一个错误。另外,如果我把它排除在外,我的所有值都是未定义的。
var fs=require('fs');
var dir='./load/';
var data={};
fs.readdir(dir,function(err,files){
if (err) throw err;
var c=0;
files.forEach(function(file){
c++;
fs.readFile(dir+file,'utf-8',function(err,html){
if (err) throw err;
data=html;
if (0===--c) {
var object=[];
var database = [];
for (var i = 0; i < data.length; i++){
object = data[i];
database[i]= {
Name: object.Name,
Qauntiy: object.Quantity,
id: object.id,
Company: object.company,
date: object.date
Source: 'Supplier' //Error generator
}
}
console.log(database);
}
});
});
});
答案 0 :(得分:0)
// assuming openFiles is an array of file names
async.each(openFiles, function(file, callback) {
// Perform operation on file here.
console.log('Processing file ' + file);
if( file.length > 32 ) {
console.log('This file name is too long');
callback('File name too long');
} else {
// Do work to process file here
console.log('File processed');
callback();
}
}, function(err){
// if any of the file processing produced an error, err would equal that error
if( err ) {
// One of the iterations produced an error.
// All processing will now stop.
console.log('A file failed to process');
} else {
console.log('All files have been processed successfully');
}
});