function baseDifference(array, values, iteratee, comparator) { let index = -1; let length = array.length; let result = []; let includes = arrayIncludes; let isCommon = true; if (!length) { return result; } if (iteratee) { values = values.map(iteratee); } if (comparator) { includes = arrayIncludesWith; isCommon = false; } else if (values.length >= 200) { includes = cacheHas; isCommon = false; values = new SetCache(values); } outer: while (++index < length) { let value = array[index]; let computed = iteratee == null ? value : iteratee(value); if (isCommon && computed === computed) { let valuesIndex = values.length; while (valuesIndex--) { if (values[valuesIndex] === computed) { continue outer; } } result.push(value); } else if (!includes(values, computed, comparator)) { result.push(value); } } return result; }