unzip.js
 1  var arrayFilter = require('./_arrayFilter'),
 2      arrayMap = require('./_arrayMap'),
 3      baseProperty = require('./_baseProperty'),
 4      baseTimes = require('./_baseTimes'),
 5      isArrayLikeObject = require('./isArrayLikeObject');
 6  
 7  /* Built-in method references for those with the same name as other `lodash` methods. */
 8  var nativeMax = Math.max;
 9  
10  /**
11   * This method is like `_.zip` except that it accepts an array of grouped
12   * elements and creates an array regrouping the elements to their pre-zip
13   * configuration.
14   *
15   * @static
16   * @memberOf _
17   * @since 1.2.0
18   * @category Array
19   * @param {Array} array The array of grouped elements to process.
20   * @returns {Array} Returns the new array of regrouped elements.
21   * @example
22   *
23   * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
24   * // => [['a', 1, true], ['b', 2, false]]
25   *
26   * _.unzip(zipped);
27   * // => [['a', 'b'], [1, 2], [true, false]]
28   */
29  function unzip(array) {
30    if (!(array && array.length)) {
31      return [];
32    }
33    var length = 0;
34    array = arrayFilter(array, function(group) {
35      if (isArrayLikeObject(group)) {
36        length = nativeMax(group.length, length);
37        return true;
38      }
39    });
40    return baseTimes(length, function(index) {
41      return arrayMap(array, baseProperty(index));
42    });
43  }
44  
45  module.exports = unzip;