@inglorious/utils
Version:
A set of general-purpose utility functions designed with functional programming principles in mind.
44 lines (36 loc) • 957 B
JavaScript
const HALF = 2
const AROUND_INDEX = 1
const NO_OCCURRENCES = 0
export const average = mean
export function mean(...numbers) {
return numbers.reduce((acc, num) => acc + num) / numbers.length
}
export function median(...numbers) {
const sortedNumbers = numbers.toSorted()
const middleIndex = numbers.length / HALF
if (Number.isInteger(middleIndex)) {
return mean(
...sortedNumbers.slice(
middleIndex - AROUND_INDEX,
middleIndex + AROUND_INDEX,
),
)
}
return sortedNumbers[Math.floor(middleIndex)]
}
export function mode(...values) {
const occurrences = values.reduce((acc, value) => {
acc[value] = acc[value] ?? NO_OCCURRENCES
acc[value]++
return acc
}, {})
return Object.entries(occurrences).reduce(
(acc, [value, occurrences]) => {
if (occurrences > acc.occurrences) {
acc = { value, occurrences }
}
return acc
},
{ occurrences: 0 },
).value
}