UNPKG

@monstermann/fn

Version:

A utility library for TypeScript.

34 lines (32 loc) 795 B
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 };