( valueExtractor: (value: T) => number = (v) => v as unknown as number, )
| 186 | * Creates an average aggregate function |
| 187 | */ |
| 188 | export function avg<T>( |
| 189 | valueExtractor: (value: T) => number = (v) => v as unknown as number, |
| 190 | ): AggregateFunction<T, number, { sum: number; count: number }> { |
| 191 | return { |
| 192 | preMap: (data: T) => ({ |
| 193 | sum: valueExtractor(data), |
| 194 | count: 0, |
| 195 | }), |
| 196 | reduce: (values: Array<[{ sum: number; count: number }, number]>) => { |
| 197 | let totalSum = 0 |
| 198 | let totalCount = 0 |
| 199 | for (const [value, multiplicity] of values) { |
| 200 | totalSum += value.sum * multiplicity |
| 201 | totalCount += multiplicity |
| 202 | } |
| 203 | return { |
| 204 | sum: totalSum, |
| 205 | count: totalCount, |
| 206 | } |
| 207 | }, |
| 208 | postMap: (result: { sum: number; count: number }) => { |
| 209 | return result.sum / result.count |
| 210 | }, |
| 211 | } |
| 212 | } |
| 213 | |
| 214 | type CanMinMax = number | Date | bigint | string |
| 215 |
no test coverage detected