time-to-botec

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

_basePullAll.js (1459B)


      1 var arrayMap = require('./_arrayMap'),
      2     baseIndexOf = require('./_baseIndexOf'),
      3     baseIndexOfWith = require('./_baseIndexOfWith'),
      4     baseUnary = require('./_baseUnary'),
      5     copyArray = require('./_copyArray');
      6 
      7 /** Used for built-in method references. */
      8 var arrayProto = Array.prototype;
      9 
     10 /** Built-in value references. */
     11 var splice = arrayProto.splice;
     12 
     13 /**
     14  * The base implementation of `_.pullAllBy` without support for iteratee
     15  * shorthands.
     16  *
     17  * @private
     18  * @param {Array} array The array to modify.
     19  * @param {Array} values The values to remove.
     20  * @param {Function} [iteratee] The iteratee invoked per element.
     21  * @param {Function} [comparator] The comparator invoked per element.
     22  * @returns {Array} Returns `array`.
     23  */
     24 function basePullAll(array, values, iteratee, comparator) {
     25   var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
     26       index = -1,
     27       length = values.length,
     28       seen = array;
     29 
     30   if (array === values) {
     31     values = copyArray(values);
     32   }
     33   if (iteratee) {
     34     seen = arrayMap(array, baseUnary(iteratee));
     35   }
     36   while (++index < length) {
     37     var fromIndex = 0,
     38         value = values[index],
     39         computed = iteratee ? iteratee(value) : value;
     40 
     41     while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
     42       if (seen !== array) {
     43         splice.call(seen, fromIndex, 1);
     44       }
     45       splice.call(array, fromIndex, 1);
     46     }
     47   }
     48   return array;
     49 }
     50 
     51 module.exports = basePullAll;