unzip.js

import { mathMax } from './internals/native';
import isArray from './isArray';
import isArrayLikeObject from './isArrayLikeObject';
/**
 * 与 [`zip`](#.zip) 类似,除了它接受分组元素的数组,并且创建一个数组,分组元素到打包前的结构。(返回数组的第一个元素包含所有的输入数组的第一元素,第二个元素包含了所有的输入数组的第二元素,依此类推。)。
 *
 * @alias module:Array.unzip
 * @since 1.0.0
 * @param {Array} array 要处理的分组元素数组。
 * @returns {Array} 重组元素的新数组。
 * @example
 *
 * unzip([['barney', 'fred'], [36, 40]]); // [['barney', 36], ['fred', 40]]
 *
 * unzip([['barney', 36], ['fred', 40]]); // [['barney', 'fred'], [36, 40]]
 *
 */
function unzip(array) {
    if (!isArray(array) || array.length === 0) {
        return [];
    }
    let length = 0;
    array = array.filter((group) => {
        if (isArrayLikeObject(group)) {
            length = mathMax(group.length, length);
            return true;
        }
        return false;
    });
    const result = Array(length);
    let index = -1;
    while (++index < length) {
        const item = array.map((group) => group[index]);
        result[index] = item;
    }
    return result;
}
export default unzip;