function aggregate_functional (numbers) {
if (numbers.length == 0) {
throw new Error("aggregate() requires at least one number")
}
const sum = numbers.reduce((s, n) => s += n)
let min = Math.min(...numbers)
let max = Math.max(...numbers)
const average = sum / numbers.length
return {
sum,
average,
min,
max,
}
}
function aggregate_imperative (numbers) {
if (numbers.length == 0) {
throw new Error("aggregate() requires at least one number")
}
let sum = 0
let min = numbers[0]
let max = numbers[0]
for (const val of numbers) {
if (val < min) min = val
if (val > max) max = val
sum += val
}
const average = sum / numbers.length
return {
sum,
average,
min,
max,
}
}
function aggregate_imperative_idx (numbers) {
if (numbers.length == 0) {
throw new Error("aggregate() requires at least one number")
}
let sum = 0
let min = numbers[0]
let max = numbers[0]
for (let i = 0; i < numbers.length; i++) {
const val = numbers[i]
if (val < min) min = val
if (val > max) max = val
sum += val
}
const average = sum / numbers.length
return {
sum,
average,
min,
max,
}
}