@klodianimeri/pipejs
Version:
Pipe functions that provide convenient and efficient ways to work with iterators.
20 lines (16 loc) • 602 B
text/typescript
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;
}
};
}
}