Files
lynchmark.com/tests/6_csv_processor/outputs/openai_gpt-5-codex.js
T

20 lines
872 B
JavaScript

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;