basant307/AI_Governance_Project
045
1import SetCache from './_SetCache.js';2import arrayIncludes from './_arrayIncludes.js';3import arrayIncludesWith from './_arrayIncludesWith.js';4import arrayMap from './_arrayMap.js';5import baseUnary from './_baseUnary.js';6import cacheHas from './_cacheHas.js';7 8/** Used as the size to enable large array optimizations. */9var LARGE_ARRAY_SIZE = 200;10 11/**12 * The base implementation of methods like `_.difference` without support13 * for excluding multiple arrays or iteratee shorthands.14 *15 * @private16 * @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.21 */22function baseDifference(array, values, iteratee, comparator) {23 var index = -1,24 includes = arrayIncludes,25 isCommon = true,26 length = array.length,27 result = [],28 valuesLength = values.length;29 30 if (!length) {31 return result;32 }33 if (iteratee) {34 values = arrayMap(values, baseUnary(iteratee));35 }36 if (comparator) {37 includes = arrayIncludesWith;38 isCommon = false;39 }40 else if (values.length >= LARGE_ARRAY_SIZE) {41 includes = cacheHas;42 isCommon = false;43 values = new SetCache(values);44 }45 outer:46 while (++index < length) {47 var value = array[index],48 computed = iteratee == null ? value : iteratee(value);49 50 value = (comparator || value !== 0) ? value : 0;51 if (isCommon && computed === computed) {52 var valuesIndex = valuesLength;53 while (valuesIndex--) {54 if (values[valuesIndex] === computed) {55 continue outer;56 }57 }58 result.push(value);59 }60 else if (!includes(values, computed, comparator)) {61 result.push(value);62 }63 }64 return result;65}66 67export default baseDifference;68 