UNPKG

@klodianimeri/pipejs

Version:

Pipe functions that provide convenient and efficient ways to work with iterators.

20 lines (16 loc) 602 B
import { Pipe } from "../pipe.js"; export function distinct(keyselector?: (element: any) => any): Pipe { keyselector = typeof keyselector === 'function' ? keyselector : (e) => e; return () => { let elements: Set<any> = new Set<any>(); return (result: IteratorResult<any>): IteratorResult<any> => { if (result?.done) { return result; } if (!elements.has(keyselector(result.value))) { elements.add(keyselector(result.value)); return result; } }; } }