L Lawliet
L Lawliet

Reputation: 459

JavaScript: Breaking String to convert in CSV

I've JS list object as:

const data = [
  {
    arrivalAddress: 'Address',
    arrivalLat: '72.989506',
    arrivalLon: '19.149307',
    arrivalTimeEnd: '8/8/2020 13:37',
    arrivalTimeStart: '8/8/2020 13:37',
    carrier: 'ABC',
    departureAddress: 'abc,sdkfnv',
    departureLat: '73.008304',
    departureLon: '19.114599',
    departureTime: '8/8/2020 13:37',
    hazardousGoods: 'TRUE',
    id: '1',
    receiver: 'Tom',
    sender: 'Jack',
    tourID: 'abc',
    vehicleClass: 'eu_heavy'
  },
  {
    arrivalAddress: 'Address',
    arrivalLat: '72.989506',
    arrivalLon: '19.149307',
    arrivalTimeEnd: '8/8/2020 13:37',
    arrivalTimeStart: '8/8/2020 13:37',
    carrier: 'ABC',
    departureAddress: 'abc,sdkfnv',
    departureLat: '73.008304',
    departureLon: '19.114599',
    departureTime: '8/8/2020 13:37',
    hazardousGoods: 'TRUE',
    id: '1',
    receiver: 'Tom',
    sender: 'Jack',
    tourID: 'abc',
    vehicleClass: 'eu_heavy'
  }
  // ...
]

I want to convert above data as csv, So I tried below code:

let dictionaryKeys = Object.keys(data[0]);

let dictValuesAsCsv = data.map(dict => (
  dictionaryKeys.map(key => dict[key]).join(',')
  
));
//console.log(dictValuesAsCsv);
let resultA = [dictionaryKeys.join(','), dictValuesAsCsv].join('\n');

console.log(resultA);

And It's working fine but the rows are not getting in new line, all rows are in the same line:

id,departureLat,departureLon,departureAddress,arrivalLat,arrivalLon,arrivalAddress,departureTime,arrivalTimeStart,arrivalTimeEnd,tourID,vehicleClass,hazardousGoods,carrier,sender,receiver
1,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,2,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,3,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,4,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,5,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,6,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,7,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,8,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom,9,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom

As you can see all rows are in same line

I want output as:

id,departureLat,departureLon,departureAddress,arrivalLat,arrivalLon,arrivalAddress,departureTime,arrivalTimeStart,arrivalTimeEnd,tourID,vehicleClass,hazardousGoods,carrier,sender,receiver
1,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
2,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
3,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
4,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
5,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
6,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
7,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
8,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom
9,73.008304,19.114599,abc,sdkfnv,72.989506,19.149307,Mindspace,Airoli,8/8/2020 13:37,8/8/2020 13:37,8/8/2020 13:37,abc,eu_heavy,TRUE,ABC,Jack,Tom

data = [{
    arrivalAddress: "Address",
    arrivalLat: "72.989506",
    arrivalLon: "19.149307",
    arrivalTimeEnd: "8/8/2020 13:37",
    arrivalTimeStart: "8/8/2020 13:37",
    carrier: "ABC",
    departureAddress: "abc,sdkfnv",
    departureLat: "73.008304",
    departureLon: "19.114599",
    departureTime: "8/8/2020 13:37",
    hazardousGoods: "TRUE",
    id: "1",
    "receiver ": "Tom",
    sender: "Jack",
    tourID: "abc",
    vehicleClass: "eu_heavy",
  }, {
    arrivalAddress: "Address",
    arrivalLat: "72.989506",
    arrivalLon: "19.149307",
    arrivalTimeEnd: "8/8/2020 13:37",
    arrivalTimeStart: "8/8/2020 13:37",
    carrier: "ABC",
    departureAddress: "abc,sdkfnv",
    departureLat: "73.008304",
    departureLon: "19.114599",
    departureTime: "8/8/2020 13:37",
    hazardousGoods: "TRUE",
    id: "1",
    "receiver ": "Tom",
    sender: "Jack",
    tourID: "abc",
    vehicleClass: "eu_heavy",
  },

]

let dictionaryKeys = Object.keys(data[0]);

let dictValuesAsCsv = data.map(dict => (
  dictionaryKeys.map(key => dict[key]).join(',')

));
//console.log(dictValuesAsCsv);
let resultA = [dictionaryKeys.join(','), dictValuesAsCsv].join('\n');

console.log(resultA);

Upvotes: 2

Views: 55

Answers (1)

hgb123
hgb123

Reputation: 14891

You are going right way, but you have to spread (doc for spread operator) dictValuesAsCsv

let resultA = [dictionaryKeys.join(','), ...dictValuesAsCsv].join('\n');
// would lead to [keys, row, row, row,...]
// instead of    [keys, [row, row, row,...]] 

Full code

const data = [
  {
    arrivalAddress: 'Address',
    arrivalLat: '72.989506',
    arrivalLon: '19.149307',
    arrivalTimeEnd: '8/8/2020 13:37',
    arrivalTimeStart: '8/8/2020 13:37',
    carrier: 'ABC',
    departureAddress: 'abc,sdkfnv',
    departureLat: '73.008304',
    departureLon: '19.114599',
    departureTime: '8/8/2020 13:37',
    hazardousGoods: 'TRUE',
    id: '1',
    receiver: 'Tom',
    sender: 'Jack',
    tourID: 'abc',
    vehicleClass: 'eu_heavy'
  },
  {
    arrivalAddress: 'Address',
    arrivalLat: '72.989506',
    arrivalLon: '19.149307',
    arrivalTimeEnd: '8/8/2020 13:37',
    arrivalTimeStart: '8/8/2020 13:37',
    carrier: 'ABC',
    departureAddress: 'abc,sdkfnv',
    departureLat: '73.008304',
    departureLon: '19.114599',
    departureTime: '8/8/2020 13:37',
    hazardousGoods: 'TRUE',
    id: '1',
    receiver: 'Tom',
    sender: 'Jack',
    tourID: 'abc',
    vehicleClass: 'eu_heavy'
  }
]

let dictionaryKeys = Object.keys(data[0]);

let dictValuesAsCsv = data.map(dict => (
  dictionaryKeys.map(key => dict[key]).join(',')

));
//console.log(dictValuesAsCsv);
let resultA = [dictionaryKeys.join(','), ...dictValuesAsCsv].join('\n');

console.log(resultA);

Upvotes: 3

Related Questions