Skip to content

Commit e5ef626

Browse files
committed
✨ Filter
1 parent 2c9eb86 commit e5ef626

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/language/filter.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { filter } from "./filter.ts";
2+
import { assertEquals } from "../../deps.ts";
3+
4+
Deno.test("filter", () => {
5+
const data = filter([1, 2, 3, 4, 5], (item) => item % 2 === 0);
6+
assertEquals(data, [2, 4]);
7+
});

src/language/filter.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export type FilterCallback<T> = (
2+
item: T,
3+
index: number,
4+
array: readonly T[],
5+
) => boolean;
6+
7+
export function filter<T>(array: readonly T[], test: FilterCallback<T>) {
8+
const result: T[] = [];
9+
10+
for (const [index, value] of array.entries()) {
11+
if (test(value, index, array)) {
12+
result.push(value);
13+
}
14+
}
15+
16+
return result;
17+
}

0 commit comments

Comments
 (0)