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