time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

_lazyValue.js (1790B)


      1 var baseWrapperValue = require('./_baseWrapperValue'),
      2     getView = require('./_getView'),
      3     isArray = require('./isArray');
      4 
      5 /** Used to indicate the type of lazy iteratees. */
      6 var LAZY_FILTER_FLAG = 1,
      7     LAZY_MAP_FLAG = 2;
      8 
      9 /* Built-in method references for those with the same name as other `lodash` methods. */
     10 var nativeMin = Math.min;
     11 
     12 /**
     13  * Extracts the unwrapped value from its lazy wrapper.
     14  *
     15  * @private
     16  * @name value
     17  * @memberOf LazyWrapper
     18  * @returns {*} Returns the unwrapped value.
     19  */
     20 function lazyValue() {
     21   var array = this.__wrapped__.value(),
     22       dir = this.__dir__,
     23       isArr = isArray(array),
     24       isRight = dir < 0,
     25       arrLength = isArr ? array.length : 0,
     26       view = getView(0, arrLength, this.__views__),
     27       start = view.start,
     28       end = view.end,
     29       length = end - start,
     30       index = isRight ? end : (start - 1),
     31       iteratees = this.__iteratees__,
     32       iterLength = iteratees.length,
     33       resIndex = 0,
     34       takeCount = nativeMin(length, this.__takeCount__);
     35 
     36   if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
     37     return baseWrapperValue(array, this.__actions__);
     38   }
     39   var result = [];
     40 
     41   outer:
     42   while (length-- && resIndex < takeCount) {
     43     index += dir;
     44 
     45     var iterIndex = -1,
     46         value = array[index];
     47 
     48     while (++iterIndex < iterLength) {
     49       var data = iteratees[iterIndex],
     50           iteratee = data.iteratee,
     51           type = data.type,
     52           computed = iteratee(value);
     53 
     54       if (type == LAZY_MAP_FLAG) {
     55         value = computed;
     56       } else if (!computed) {
     57         if (type == LAZY_FILTER_FLAG) {
     58           continue outer;
     59         } else {
     60           break outer;
     61         }
     62       }
     63     }
     64     result[resIndex++] = value;
     65   }
     66   return result;
     67 }
     68 
     69 module.exports = lazyValue;