|
|
- import _curry2 from "./internal/_curry2.js";
- import _dispatchable from "./internal/_dispatchable.js";
- import _xdropRepeatsWith from "./internal/_xdropRepeatsWith.js";
- import last from "./last.js";
- /**
- * Returns a new list without any consecutively repeating elements. Equality is
- * determined by applying the supplied predicate to each pair of consecutive elements. The
- * first element in a series of equal elements will be preserved.
- *
- * Acts as a transducer if a transformer is given in list position.
- *
- * @func
- * @memberOf R
- * @since v0.14.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} `list` without repeating elements.
- * @see R.transduce
- * @example
- *
- * const l = [1, -1, 1, 3, 4, -4, -4, -5, 5, 3, 3];
- * R.dropRepeatsWith(R.eqBy(Math.abs), l); //=> [1, 3, 4, -5, 3]
- */
-
- var dropRepeatsWith =
- /*#__PURE__*/
- _curry2(
- /*#__PURE__*/
- _dispatchable([], _xdropRepeatsWith, function dropRepeatsWith(pred, list) {
- var result = [];
- var idx = 1;
- var len = list.length;
-
- if (len !== 0) {
- result[0] = list[0];
-
- while (idx < len) {
- if (!pred(last(result), list[idx])) {
- result[result.length] = list[idx];
- }
-
- idx += 1;
- }
- }
-
- return result;
- }));
-
- export default dropRepeatsWith;
|