Home Reference Source Test Repository

lib/transpose.js

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.transpose = transpose;
/**
 * Transposes the rows and the columns.
 *
 * @since v0.1.0
 * @param {Array} list
 * @return {Array}
 * @example
 *   transpose([[1, 2, 3], [4, 5, 6]]) // => [[1, 4], [2, 5], [3, 6]]
 *
 *   transpose([[10, 11], [20], [], [30, 31, 32]]) // => [[10, 20, 30], [11, 31], [32]]
 */
function transpose(list) {
    if (list.length === 0) return undefined;
    var indices = {};
    list.map(function (l) {
        return l.reduce(function (obj, current, index) {
            if (!(index in indices)) {
                indices[index] = [];
            }
            indices[index].push(current);
            return obj;
        }, []);
    });
    return Object.values(indices);
}