46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 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; |