Skip to content

Instantly share code, notes, and snippets.

View dinocarl's full-sized avatar

Carl Albrecht-Buehler dinocarl

View GitHub Profile
@dinocarl
dinocarl / smplRecMerge.js
Created July 18, 2024 16:58
Simplistic recursive merge fn for JS
const recMerge = (objA, objB) => Object.entries(objB).reduce(
(acc, [key, val]) => Object.assign(
{},
objA,
{ [key]: is(Object, val) ? recMerge(objA[key], val) : val }
),
{}
);
type Predicate<T> = (value: T) => boolean;
type Mapper<T, R> = (value: T) => R;
type CondPair<T, R> = [Predicate<T>, Mapper<T, R>];
// recursive cond that can breaks early or returns undefined
const cond = <T, R>(
[[pred, mapr] = [] as unknown as CondPair<T, R>, ...rest]: CondPair<T, R>[] = []
): ((val: T) => R | undefined) => (val: T): R | undefined =>
!pred ? undefined :
pred(val) ? mapr(val) : cond(rest)(val);