@monstermann/fn
Version:
A utility library for TypeScript.
36 lines (34 loc) • 948 B
JavaScript
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 };