UNPKG

@monstermann/fn

Version:

A utility library for TypeScript.

39 lines (37 loc) 883 B
import { dfdlT } from "@monstermann/dfdl"; //#region src/array/medianOrElse.ts /** * `medianOrElse(array, orElse)` * * Returns the median value from `array`, or calls `orElse` if the array is empty. * * ```ts * medianOrElse([1, 3, 5], () => 0); // 3 * medianOrElse([1, 2, 3, 4], () => 0); // 2.5 * medianOrElse([], () => 0); // 0 * ``` * * ```ts * pipe( * [1, 3, 5], * medianOrElse(() => 0), * ); // 3 * pipe( * [1, 2, 3, 4], * medianOrElse(() => 0), * ); // 2.5 * pipe( * [], * medianOrElse(() => 0), * ); // 0 * ``` */ const medianOrElse = dfdlT((target, orElse) => { if (target.length === 0) return orElse(target); const sorted = target.toSorted((a, b) => a - b); const mid = Math.floor(sorted.length / 2); if (sorted.length % 2 === 0) return (sorted[mid - 1] + sorted[mid]) / 2; else return sorted[mid]; }, 2); //#endregion export { medianOrElse };