mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-13 15:55:27 +00:00
16 lines
734 B
JavaScript
16 lines
734 B
JavaScript
async function processCSV(csv,cfg){
|
|
const [{Papa},{groupBy:gb}]=await Promise.all([
|
|
import('https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.mjs'),
|
|
import('https://cdn.jsdelivr.net/npm/lodash-es@4.17.21/lodash.js')
|
|
])
|
|
const {filterColumn:fc,filterValue:fv,groupBy:gbk,aggregateColumn:ac,operation:op}=cfg
|
|
const rows=Papa.parse(csv,{header:!0,skipEmptyLines:!0}).data.filter(r=>r&&r[fc]==fv)
|
|
const grouped=gb(rows,r=>r?.[gbk]??'')
|
|
return Object.entries(grouped).map(([k,arr])=>{
|
|
const nums=arr.map(r=>{const n=+r[ac];return Number.isFinite(n)?n:0})
|
|
const sum=nums.reduce((a,b)=>a+b,0)
|
|
const result=op==='sum'?sum:op==='avg'?sum/nums.length:arr.length
|
|
return {[gbk]:k,result}
|
|
})
|
|
}
|
|
export default processCSV; |