迭代NodeJS

时间:2018-02-27 16:06:31

标签: javascript node.js csv

我非常擅长编写脚本并需要一些帮助。我有这个对象数组:

[ 'Gender', 'Customer Code', 'From', 'To', 'Transport Code' ] [ 'M', 'XX123', 'DAL', 'RSW', '555A' ] [ 'F', 'XXXHXH,XXA', 'DAL', 'RSW', '5A,HDSJNDSJ' ]

我通过fast-csv api从csv文件中读取。我发现在迭代对象时遇到困难,因为他们没有密钥。另外,我在""中包含的几个多值字段需要格式化为单独的行/记录。我该怎么做才能将以下格式的数据作为csv file

获取
Gender,Customer Code,From,To,Transport Code
M,XX123,DAL,RSW,555A
F,XXXHXH,DAL,RSW,5A
F,XXA,DAL,RSW,5A
F,XXXHXH,DAL,RSW, HDSJNDSJ
F,XXA,DAL,RSW, HDSJNDSJ

以下是我的代码:

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

csv
 .fromPath("journey_details.csv")
 .on("data", function(data){
     var count = 5;
     var elements = '';
     for(var element of data) {
         while (count > 0) {
             elements += element + ','
             count--;
             if(count == 0) {
                 elements += '\n';
                 fs.appendFile('output.csv',elements,function(error) {
                    if (error) {
                      console.error("write error:  " + error.message);
                    } else {
                      console.log("Write Successful!");
                      count = 5;
                    }
               });
             }
         }
     }
 })

 .on("end", function(){
     console.log("Task Complete...");
 });

但它似乎没有成功。请指教......

1 个答案:

答案 0 :(得分:0)

此方法使用递归来遍历每个索引,并根据每个值创建路径。

此方法不符合所需顺序,但会生成可能的组合。

name = "id"
type = "int"
max_length = 11
default = null
primary_key = 1
function loop(arr, acc, path, index) {
  for (var i = index; i < arr.length; i++) {
    var split = arr[i].split(',');
    if (split.length) {
      for (var s of split) {
        var innerPath = loop(arr, acc, [...path, s], i + 1);
        if (innerPath) acc.push(innerPath);        
      }

      return null;
    } else {
      path.push(arr[i]);
    }
  }

  acc.push(path);
}

var names = [ 'Gender', 'Customer Code', 'From', 'To', 'Transport Code' ];
var array = [ [ 'M', 'XX123', 'DAL', 'RSW', '555A' ],
              [ 'F', 'XXXHXH,XXA', 'DAL', 'RSW', '5A,HDSJNDSJ' ]];

console.log(names.join());
array.forEach((a) => {
  var acc = [];
  loop(a, acc, [], 0);
  acc.forEach(aa => console.log(aa.join()));
});

相关问题