pragmatic-fp-ts
Version:
Opinionated functional programming library with easy use in mind
22 lines (17 loc) • 889 B
text/typescript
import { Mappable } from "./main.ts";
export function intersectsBy<A, B>(getComp: Mappable<A, B>, setA: A[], setB: A[]): boolean;
export function intersectsBy<A, B>(getComp: Mappable<A, B>, setA: A[]): (setB: A[]) => boolean;
export function intersectsBy<A, B>(getComp: Mappable<A, B>): (setA: A[]) => (setB: A[]) => boolean;
export function intersectsBy<A, B>(getComp: Mappable<A, B>, setA?: A[], setB?: A[]) {
if (arguments.length === 2) return (setB_: A[]) => intersectsBy(getComp, setA!, setB_);
else if (arguments.length === 1)
return function(setA_: A[], setB_?: A[]) {
return arguments.length === 1
? intersectsBy(getComp, setA_)
: intersectsBy(getComp, setA_, setB_!);
};
const ii = new Set((setA ?? []).map(getComp));
const bb = setB ?? [];
for (let i = 0; i < bb.length; ++i) if (ii.has(getComp(bb[i]))) return true;
return false;
}