1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import _curry2 from "./internal/_curry2.js";
- import _dispatchable from "./internal/_dispatchable.js";
- import _includesWith from "./internal/_includesWith.js";
- import _xuniqWith from "./internal/_xuniqWith.js";
- /**
- * Returns a new list containing only one copy of each element in the original
- * list, based upon the value returned by applying the supplied predicate to
- * two list elements. Prefers the first item if two items compare equal based
- * on the predicate.
- *
- * Acts as a transducer if a transformer is given in list position.
- *
- * @func
- * @memberOf R
- * @since v0.2.0
- * @category List
- * @sig ((a, a) -> Boolean) -> [a] -> [a]
- * @param {Function} pred A predicate used to test whether two items are equal.
- * @param {Array} list The array to consider.
- * @return {Array} The list of unique items.
- * @example
- *
- * const strEq = R.eqBy(String);
- * R.uniqWith(strEq)([1, '1', 2, 1]); //=> [1, 2]
- * R.uniqWith(strEq)([{}, {}]); //=> [{}]
- * R.uniqWith(strEq)([1, '1', 1]); //=> [1]
- * R.uniqWith(strEq)(['1', 1, 1]); //=> ['1']
- */
- var uniqWith =
- /*#__PURE__*/
- _curry2(
- /*#__PURE__*/
- _dispatchable([], _xuniqWith, function (pred, list) {
- var idx = 0;
- var len = list.length;
- var result = [];
- var item;
- while (idx < len) {
- item = list[idx];
- if (!_includesWith(pred, item, result)) {
- result[result.length] = item;
- }
- idx += 1;
- }
- return result;
- }));
- export default uniqWith;
|