@technobuddha/library
Version:
A large library of useful functions
28 lines • 1.89 kB
JavaScript
import { floor } from "./floor.js";
import { isEven } from "./is-even.js";
/**
* Calculates the median value of an array of numbers.
*
* The median is the middle number in a sorted, ascending or descending, list of numbers.
* If the list has an even number of elements, the median is the average of the two middle numbers.
* @param numbers - An array of numbers to find the median of.
* @returns The median value, or `NaN` if the input array is empty.
* @example
* ```typescript
* median([1, 2, 3]); // 2
* median([1, 2, 3, 4]); // 2.5
* median([7, 1, 3, 5]); // 4
* median([]); // NaN
* ```
* @group Math
* @category Statistics
*/
export function median(numbers) {
if (numbers.length === 0) {
return Number.NaN;
}
const sorted = numbers.toSorted((a, b) => a - b);
const mid = floor(sorted.length / 2);
return isEven(sorted.length) ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21lZGlhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWlCO0lBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFckMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkYsQ0FBQyJ9