| var arrayMap = require('./_arrayMap'), |
| baseIndexOf = require('./_baseIndexOf'), |
| baseIndexOfWith = require('./_baseIndexOfWith'), |
| baseUnary = require('./_baseUnary'), |
| copyArray = require('./_copyArray'); |
| |
| /** Used for built-in method references. */ |
| var arrayProto = Array.prototype; |
| |
| /** Built-in value references. */ |
| var splice = arrayProto.splice; |
| |
| /** |
| * The base implementation of `_.pullAllBy` without support for iteratee |
| * shorthands. |
| * |
| * @private |
| * @param {Array} array The array to modify. |
| * @param {Array} values The values to remove. |
| * @param {Function} [iteratee] The iteratee invoked per element. |
| * @param {Function} [comparator] The comparator invoked per element. |
| * @returns {Array} Returns `array`. |
| */ |
| function basePullAll(array, values, iteratee, comparator) { |
| var indexOf = comparator ? baseIndexOfWith : baseIndexOf, |
| index = -1, |
| length = values.length, |
| seen = array; |
| |
| if (array === values) { |
| values = copyArray(values); |
| } |
| if (iteratee) { |
| seen = arrayMap(array, baseUnary(iteratee)); |
| } |
| while (++index < length) { |
| var fromIndex = 0, |
| value = values[index], |
| computed = iteratee ? iteratee(value) : value; |
| |
| while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { |
| if (seen !== array) { |
| splice.call(seen, fromIndex, 1); |
| } |
| splice.call(array, fromIndex, 1); |
| } |
| } |
| return array; |
| } |
| |
| module.exports = basePullAll; |