You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					70 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					70 lines
				
				1.7 KiB
			| 
											3 years ago
										 | var baseWrapperValue = require('./_baseWrapperValue'), | ||
|  |     getView = require('./_getView'), | ||
|  |     isArray = require('./isArray'); | ||
|  | 
 | ||
|  | /** Used to indicate the type of lazy iteratees. */ | ||
|  | var LAZY_FILTER_FLAG = 1, | ||
|  |     LAZY_MAP_FLAG = 2; | ||
|  | 
 | ||
|  | /* Built-in method references for those with the same name as other `lodash` methods. */ | ||
|  | var nativeMin = Math.min; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Extracts the unwrapped value from its lazy wrapper. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @name value | ||
|  |  * @memberOf LazyWrapper | ||
|  |  * @returns {*} Returns the unwrapped value. | ||
|  |  */ | ||
|  | function lazyValue() { | ||
|  |   var array = this.__wrapped__.value(), | ||
|  |       dir = this.__dir__, | ||
|  |       isArr = isArray(array), | ||
|  |       isRight = dir < 0, | ||
|  |       arrLength = isArr ? array.length : 0, | ||
|  |       view = getView(0, arrLength, this.__views__), | ||
|  |       start = view.start, | ||
|  |       end = view.end, | ||
|  |       length = end - start, | ||
|  |       index = isRight ? end : (start - 1), | ||
|  |       iteratees = this.__iteratees__, | ||
|  |       iterLength = iteratees.length, | ||
|  |       resIndex = 0, | ||
|  |       takeCount = nativeMin(length, this.__takeCount__); | ||
|  | 
 | ||
|  |   if (!isArr || (!isRight && arrLength == length && takeCount == length)) { | ||
|  |     return baseWrapperValue(array, this.__actions__); | ||
|  |   } | ||
|  |   var result = []; | ||
|  | 
 | ||
|  |   outer: | ||
|  |   while (length-- && resIndex < takeCount) { | ||
|  |     index += dir; | ||
|  | 
 | ||
|  |     var iterIndex = -1, | ||
|  |         value = array[index]; | ||
|  | 
 | ||
|  |     while (++iterIndex < iterLength) { | ||
|  |       var data = iteratees[iterIndex], | ||
|  |           iteratee = data.iteratee, | ||
|  |           type = data.type, | ||
|  |           computed = iteratee(value); | ||
|  | 
 | ||
|  |       if (type == LAZY_MAP_FLAG) { | ||
|  |         value = computed; | ||
|  |       } else if (!computed) { | ||
|  |         if (type == LAZY_FILTER_FLAG) { | ||
|  |           continue outer; | ||
|  |         } else { | ||
|  |           break outer; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     result[resIndex++] = value; | ||
|  |   } | ||
|  |   return result; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = lazyValue; |