在javascript中调换可变大小的数组?

时间:2018-06-13 18:24:14

标签: javascript arrays

我正在尝试将我的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;
    }

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用数组来转置数组,其中外部数组的长度为每行的长度。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

你几乎就在那里,只是错过了内循环(因为CSV表有行X列):

&#13;
&#13;
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;
&#13;
&#13;