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 d1 = [
[1,'A'],
[2,'B'],
[3,'C'],
[-1,'a']
];
const d2 = [
[4,'D', true],
[5,'E'],
[6,'F', false, 100]
];
const d3 = [
[7,'X'],
[8,'Y'],
[9,'Z'],
[-7, 'x'],
[-8, 'y']
];
const data = makeCSVData({ d1, d2, d3 }, ['num', 'alpha', 'beta', 'gamma']);
data.forEach(line => {
console.log(line.join(','));
});