Skip to main content
Module

x/ramda/uniqWith.js

:ram: Practical functional Javascript
Very Popular
Go to Latest
File
import _includesWith from './internal/_includesWith';import _curry2 from './internal/_curry2';

/** * 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. * * @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 = _curry2(function uniqWith(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;