UNPKG

@monstermann/fn

Version:

A utility library for TypeScript.

36 lines (34 loc) 948 B
import { addRange, createRange, hasRange, spliceRange } from "./internals/range.js"; import { dfdlT } from "@monstermann/dfdl"; import { cloneArray } from "@monstermann/remmi"; //#region src/array/removeAll.ts /** * `removeAll(target, values)` * * Removes all occurrences of each value in `values` from `target` array. If no values are found, returns the original array unchanged. Supports iterables for the values parameter. * * ```ts * removeAll([1, 2, 3, 2, 4], [2, 4]); // [1, 3] * ``` * * ```ts * pipe([1, 2, 3, 2, 4], removeAll([2, 4])); // [1, 3] * ``` */ const removeAll = dfdlT((target, values) => { const range = createRange(); for (const value of values) { let idx = target.indexOf(value); while (idx !== -1) { addRange(range, idx); idx = target.indexOf(value, idx + 1); } } if (hasRange(range)) { target = cloneArray(target); spliceRange(target, range); } return target; }, 2); //#endregion export { removeAll };