mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-16 08:57:52 +00:00
17 lines
597 B
JavaScript
17 lines
597 B
JavaScript
const processCSV = async (csv, { filterColumn: fCol, filterValue: fVal, groupBy: gBy, aggregateColumn: aCol, operation: op }) => {
|
|
const { csvParse, rollup, sum } = await import('https://cdn.jsdelivr.net/npm/d3@7/+esm')
|
|
|
|
return Array.from(
|
|
rollup(
|
|
csvParse(csv).filter(r => r[fCol] == fVal),
|
|
g => {
|
|
if (op === 'count') return g.length
|
|
const nums = g.map(r => +r[aCol] || 0), total = sum(nums)
|
|
return op === 'sum' ? total : total / nums.length
|
|
},
|
|
d => d[gBy]
|
|
),
|
|
([k, v]) => ({ [gBy]: k, result: v })
|
|
)
|
|
}
|
|
export default processCSV; |