Q200232

by jun68ykt

HTML

<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

JavaScript

function makeCSVData(dataObj, columns) {
  const keys = Object.keys(dataObj).sort();  
  
  const lengths = keys.reduce((m, k) => m.set(k, Math.max(...dataObj[k].map(ary => ary.length))), new Map());

  const header = keys.reduce((ary, k) => 
    ary.concat([...Array(lengths.get(k))].map((_, i) => `${k}-${columns[i]}`)), []);
  
  const numRows = Math.max(...Object.values(dataObj).map(ary => ary.length));
  
  const data = [...Array(numRows)].reduce((ary, _, i) => {
      ary.push(keys.reduce((a, k) => 
        a.concat(
          dataObj[k][i] ?
            [...dataObj[k][i], ...Array(lengths.get(k) - dataObj[k][i].length ) ] :
            [...Array(lengths.get(k))]
        ) ,[]));
      return ary;
    },
    [header]);
    
  return data;
}


const data1 = [
  [1,'A'],
  [2,'B'],
  [3,'C']
];

const data2 = [
  [4,'D'],
  [5,'E'],
  [6,'F']
];

const data = makeCSVData({ data1, data2 }, ['num', 'alpha']);

data.forEach(line => {
  console.log(line.join(','));
});