src/median.js
zzmq.dev@gmail.com/mathkit / src / median.js
@ 9271926f
Download
Ladder Summary
- file Implements a median(numbers) function that validates the input array, ensures all elements are finite numbers, sorts a copy of the array, and returns the median value (or the average of the two middle values for even‑length arrays), returning undefined for invalid or empty inputs.
/**
* Returns the median of an array of numbers.
*
* @param {number[]} numbers - Array of numbers to evaluate.
* @returns {number|undefined} The median value, or undefined for invalid inputs or empty array.
*/
export function median(numbers) {
// Validate that the input is an array
if (!Array.isArray(numbers)) return undefined;
const len = numbers.length;
if (len === 0) return undefined;
// Ensure every element is a finite number
for (const n of numbers) {
if (typeof n !== "number" || !Number.isFinite(n)) return undefined;
}
// Create a sorted copy (ascending)
const sorted = [...numbers].sort((a, b) => a - b);
const middle = Math.floor(len / 2);
if (len % 2 === 1) {
// Odd length – return the middle element
return sorted[middle];
} else {
// Even length – return the average of the two middle elements
return (sorted[middle - 1] + sorted[middle]) / 2;
}
}