@newdash/newdash
Version:
javascript/typescript utility library
48 lines (47 loc) • 1.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.differenceBy = void 0;
const baseDifference_1 = __importDefault(require("./.internal/baseDifference"));
const baseFlatten_1 = __importDefault(require("./.internal/baseFlatten"));
const getIteratee_1 = __importDefault(require("./.internal/getIteratee"));
const isArrayLikeObject_1 = __importDefault(require("./isArrayLikeObject"));
const last_1 = __importDefault(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.
*
* @since 5.9.0
* @category Array
* @param array The array to inspect.
* @param values The values to exclude.
* @returns Returns the new array of filtered values.
* @example
*
* ```js
* _.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 }]
* ```
*/
function differenceBy(array, ...values) {
let iteratee = (0, last_1.default)(values);
if ((0, isArrayLikeObject_1.default)(iteratee)) {
iteratee = undefined;
}
return (0, isArrayLikeObject_1.default)(array)
? (0, baseDifference_1.default)(array, (0, baseFlatten_1.default)(values, 1, isArrayLikeObject_1.default, true), (0, getIteratee_1.default)(iteratee, 2))
: [];
}
exports.differenceBy = differenceBy;
exports.default = differenceBy;