| 
								
							 | 
							
								var baseDifference = require('./_baseDifference'),
							 | 
						
						
						
							| 
								
							 | 
							
								    baseFlatten = require('./_baseFlatten'),
							 | 
						
						
						
							| 
								
							 | 
							
								    baseIteratee = require('./_baseIteratee'),
							 | 
						
						
						
							| 
								
							 | 
							
								    baseRest = require('./_baseRest'),
							 | 
						
						
						
							| 
								
							 | 
							
								    isArrayLikeObject = require('./isArrayLikeObject'),
							 | 
						
						
						
							| 
								
							 | 
							
								    last = require('./last');
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								/**
							 | 
						
						
						
							| 
								
							 | 
							
								 * This method is like `_.difference` except that it accepts `iteratee` which
							 | 
						
						
						
							| 
								
							 | 
							
								 * is invoked for each element of `array` and `values` to generate the criterion
							 | 
						
						
						
							| 
								
							 | 
							
								 * by which they're compared. The order and references of result values are
							 | 
						
						
						
							| 
								
							 | 
							
								 * determined by the first array. The iteratee is invoked with one argument:
							 | 
						
						
						
							| 
								
							 | 
							
								 * (value).
							 | 
						
						
						
							| 
								
							 | 
							
								 *
							 | 
						
						
						
							| 
								
							 | 
							
								 * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
							 | 
						
						
						
							| 
								
							 | 
							
								 *
							 | 
						
						
						
							| 
								
							 | 
							
								 * @static
							 | 
						
						
						
							| 
								
							 | 
							
								 * @memberOf _
							 | 
						
						
						
							| 
								
							 | 
							
								 * @since 4.0.0
							 | 
						
						
						
							| 
								
							 | 
							
								 * @category Array
							 | 
						
						
						
							| 
								
							 | 
							
								 * @param {Array} array The array to inspect.
							 | 
						
						
						
							| 
								
							 | 
							
								 * @param {...Array} [values] The values to exclude.
							 | 
						
						
						
							| 
								
							 | 
							
								 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
							 | 
						
						
						
							| 
								
							 | 
							
								 * @returns {Array} Returns the new array of filtered values.
							 | 
						
						
						
							| 
								
							 | 
							
								 * @example
							 | 
						
						
						
							| 
								
							 | 
							
								 *
							 | 
						
						
						
							| 
								
							 | 
							
								 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
							 | 
						
						
						
							| 
								
							 | 
							
								 * // => [1.2]
							 | 
						
						
						
							| 
								
							 | 
							
								 *
							 | 
						
						
						
							| 
								
							 | 
							
								 * // The `_.property` iteratee shorthand.
							 | 
						
						
						
							| 
								
							 | 
							
								 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
							 | 
						
						
						
							| 
								
							 | 
							
								 * // => [{ 'x': 2 }]
							 | 
						
						
						
							| 
								
							 | 
							
								 */
							 | 
						
						
						
							| 
								
							 | 
							
								var differenceBy = baseRest(function(array, values) {
							 | 
						
						
						
							| 
								
							 | 
							
								  var iteratee = last(values);
							 | 
						
						
						
							| 
								
							 | 
							
								  if (isArrayLikeObject(iteratee)) {
							 | 
						
						
						
							| 
								
							 | 
							
								    iteratee = undefined;
							 | 
						
						
						
							| 
								
							 | 
							
								  }
							 | 
						
						
						
							| 
								
							 | 
							
								  return isArrayLikeObject(array)
							 | 
						
						
						
							| 
								
							 | 
							
								    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2))
							 | 
						
						
						
							| 
								
							 | 
							
								    : [];
							 | 
						
						
						
							| 
								
							 | 
							
								});
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								module.exports = differenceBy;
							 |