将新的相同属性添加到现有JSON数组节点JS中的所有对象

时间:2015-10-11 20:51:47

标签: arrays json node.js attributes

我想在节点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); 
            }
        });
    });
});

1 个答案:

答案 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');
    }
});