| var arrayFilter = require('./_arrayFilter'), |
| arrayMap = require('./_arrayMap'), |
| baseProperty = require('./_baseProperty'), |
| baseTimes = require('./_baseTimes'), |
| isArrayLikeObject = require('./isArrayLikeObject'); |
| |
| /* Built-in method references for those with the same name as other `lodash` methods. */ |
| var nativeMax = Math.max; |
| |
| /** |
| * This method is like `_.zip` except that it accepts an array of grouped |
| * elements and creates an array regrouping the elements to their pre-zip |
| * configuration. |
| * |
| * @static |
| * @memberOf _ |
| * @since 1.2.0 |
| * @category Array |
| * @param {Array} array The array of grouped elements to process. |
| * @returns {Array} Returns the new array of regrouped elements. |
| * @example |
| * |
| * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); |
| * // => [['a', 1, true], ['b', 2, false]] |
| * |
| * _.unzip(zipped); |
| * // => [['a', 'b'], [1, 2], [true, false]] |
| */ |
| function unzip(array) { |
| if (!(array && array.length)) { |
| return []; |
| } |
| var length = 0; |
| array = arrayFilter(array, function(group) { |
| if (isArrayLikeObject(group)) { |
| length = nativeMax(group.length, length); |
| return true; |
| } |
| }); |
| return baseTimes(length, function(index) { |
| return arrayMap(array, baseProperty(index)); |
| }); |
| } |
| |
| module.exports = unzip; |