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(','));
});