1 var SetCache = require('./_SetCache'),
2 arrayIncludes = require('./_arrayIncludes'),
3 arrayIncludesWith = require('./_arrayIncludesWith'),
4 arrayMap = require('./_arrayMap'),
5 baseUnary = require('./_baseUnary'),
6 cacheHas = require('./_cacheHas');
8 /** Used as the size to enable large array optimizations. */
9 var LARGE_ARRAY_SIZE = 200;
12 * The base implementation of methods like `_.difference` without support for
13 * excluding multiple arrays or iteratee shorthands.
16 * @param {Array} array The array to inspect.
17 * @param {Array} values The values to exclude.
18 * @param {Function} [iteratee] The iteratee invoked per element.
19 * @param {Function} [comparator] The comparator invoked per element.
20 * @returns {Array} Returns the new array of filtered values.
22 function baseDifference(array, values, iteratee, comparator) {
24 includes = arrayIncludes,
26 length = array.length,
28 valuesLength = values.length;
34 values = arrayMap(values, baseUnary(iteratee));
37 includes = arrayIncludesWith;
40 else if (values.length >= LARGE_ARRAY_SIZE) {
43 values = new SetCache(values);
46 while (++index < length) {
47 var value = array[index],
48 computed = iteratee ? iteratee(value) : value;
50 if (isCommon && computed === computed) {
51 var valuesIndex = valuesLength;
52 while (valuesIndex--) {
53 if (values[valuesIndex] === computed) {
59 else if (!includes(values, computed, comparator)) {
66 module.exports = baseDifference;