@monstermann/fn
Version:
A utility library for TypeScript.
34 lines (32 loc) • 795 B
JavaScript
import { addRange, createRange, hasRange, spliceRange } from "./internals/range.js";
import { dfdlT } from "@monstermann/dfdl";
import { cloneArray } from "@monstermann/remmi";
//#region src/array/filter.ts
/**
* `filter(target, by)`
*
* Filters elements from `target` array based on the predicate function `by`.
*
* ```ts
* filter([1, 2, 3, 4], (x) => x > 2); // [3, 4]
* ```
*
* ```ts
* pipe(
* [1, 2, 3, 4],
* filter((x) => x > 2),
* ); // [3, 4]
* ```
*/
const filter = dfdlT((target, by) => {
const range = createRange();
for (let i = 0; i < target.length; i++) if (!by(target[i], i, target)) addRange(range, i);
if (hasRange(range)) {
const result = cloneArray(target);
spliceRange(result, range);
return result;
}
return target;
}, 2);
//#endregion
export { filter };