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
						
					
					
				| 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;
 |