mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-16 16:57:53 +00:00
Docs: Update benchmark results
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
let cache;
|
||||
async function processCSV(csv,cfg){
|
||||
const {csvParse,rollups}=await (cache??=import('https://cdn.jsdelivr.net/npm/d3@7/+esm'));
|
||||
const {filterColumn,filterValue,groupBy,aggregateColumn,operation}=cfg;
|
||||
if(!['sum','avg','count'].includes(operation))throw new Error('Unsupported operation');
|
||||
if(!csv||!filterColumn||!groupBy)throw new Error('Missing essentials');
|
||||
if(operation!=='count'&&!aggregateColumn)throw new Error('Missing aggregateColumn');
|
||||
const rows=csvParse(csv).filter(r=>r[filterColumn]==filterValue);
|
||||
if(!rows.length)return[];
|
||||
const fn=operation==='count'?v=>v.length:v=>{
|
||||
let s=0,n=0;
|
||||
for(const row of v){
|
||||
const val=+row[aggregateColumn];
|
||||
if(!Number.isNaN(val)){s+=val;n++;}
|
||||
}
|
||||
return operation==='sum'?s:n?s/n:0;
|
||||
};
|
||||
return rollups(rows,fn,r=>r[groupBy]).map(([k,v])=>({[groupBy]:k,[operation]:v}));
|
||||
}
|
||||
export default processCSV;
|
||||
Reference in New Issue
Block a user