我正在尝试将我的2D数组导出为.csv文件。我的数组的格式为:[[1,2],[],[3],[4,5,6]]
。我希望将电子表格格式化为
h1 h2 h3 h4
1 3 4
2 5
6
我无法更改我收到数据的格式。我已经研究了如何转置数组,但我所见过的解决方案并不适用于像我这样的可变大小数组。到目前为止,我唯一的想法(在伪代码中)是:
for (i < length of longest column; i++) {
var arr = [];
if (i > col1.length) arr.push("");
else arr.push(col1[i]);
//so on for rest of cols
csvFile += arr;
}
有更好的方法吗?
答案 0 :(得分:1)
您可以使用数组来转置数组,其中外部数组的长度为每行的长度。
var array = [[1, 2], [], [3], [4, 5, 6], [,,7]],
result = array.reduce((r, a, i, { length }) => {
a.forEach((v, j) => {
r[j] = r[j] || new Array(length).fill('');
r[j][i] = v;
});
return r;
}, []);
console.log(result);
&#13;
答案 1 :(得分:1)
你几乎就在那里,只是错过了内循环(因为CSV表有行X列):
var input = [[1,2],[],[3],[4,5,6]];
var lengthOfLongestColumn = Math.max(...input.map(a => a.length));
var csvFile = [['h1','h2','h3','h4']];
for (var i = 0; i < lengthOfLongestColumn; i++) {
var row = [];
for (var j = 0; j < input.length; j++) {
var col = input[j];
if (i >= col.length) {
row.push('');
}
else {
row.push(col[i]);
}
}
csvFile.push(row);
}
console.log(csvFile)
&#13;