mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-12 23:35:31 +00:00
20 lines
747 B
JavaScript
20 lines
747 B
JavaScript
async function processCSV(csv,cfg){
|
|
const[{default:Papa},{groupBy}]=await Promise.all([
|
|
import('https://cdn.jsdelivr.net/npm/papaparse@5.4.1/+esm'),
|
|
import('https://cdn.jsdelivr.net/npm/lodash-es@4.17.21/+esm')
|
|
]);
|
|
const{filterColumn:f,filterValue:v,groupBy:g,aggregateColumn:a,operation:o}=cfg;
|
|
const rows=Papa.parse(csv,{header:true,skipEmptyLines:true}).data.filter(r=>r[f]==v);
|
|
const groups=groupBy(rows,r=>r[g]);
|
|
return Object.entries(groups).map(([k,list])=>{
|
|
const nums=list.map(r=>{
|
|
const n=Number(r[a]);
|
|
return Number.isFinite(n)?n:0;
|
|
});
|
|
const sum=nums.reduce((t,n)=>t+n,0);
|
|
const count=list.length;
|
|
const result=o==='sum'?sum:o==='avg'?sum/count:count;
|
|
return{[g]:k,result};
|
|
});
|
|
}
|
|
export default processCSV; |