code: function baseDifference$1(array, values, iteratee, comparator) {
    var index = -1,
        includes = arrayIncludes$2,
        isCommon = true,
        length = array.length,
        result = [],
        valuesLength = values.length;
  
    if (!length) {
      return result;
    }
    if (iteratee) {
      values = arrayMap$4(values, baseUnary$3(iteratee));
    }
    if (comparator) {
      includes = arrayIncludesWith$2;
      isCommon = false;
    } else if (values.length >= LARGE_ARRAY_SIZE$1) {
      includes = cacheHas$2;
      isCommon = false;
      values = new SetCache$2(values);
    }
    outer: while (++index < length) {
      var value = array[index],
          computed = iteratee == null ? value : iteratee(value);
  
      value = comparator || value !== 0 ? value : 0;
      if (isCommon && computed === computed) {
        var valuesIndex = valuesLength;
        while (valuesIndex--) {
          if (values[valuesIndex] === computed) {
            continue outer;
          }
        }
        result.push(value);
      } else if (!includes(values, computed, comparator)) {
        result.push(value);
      }
    }
    return result;
  }
docs: The base implementation of methods like `_.difference` without support
  for excluding multiple arrays or iteratee shorthands.
  
  @private
  @param {Array} array The array to inspect.
  @param {Array} values The values to exclude.
  @param {Function} [iteratee] The iteratee invoked per element.
  @param {Function} [comparator] The comparator invoked per element.
  @returns {Array} Returns the new array of filtered values.