Files
lynchmark.com/tests/6_csv_processor/outputs_gemini/gemini-3-pro-preview TEMP_0.3.js
T

18 lines
740 B
JavaScript

const processCSV = async (csvString, { filterColumn, filterValue, groupBy, aggregateColumn, operation }) => {
const [{ csvParse }, { rollup, sum, mean }] = await Promise.all([
import('https://cdn.jsdelivr.net/npm/d3-dsv@3/+esm'),
import('https://cdn.jsdelivr.net/npm/d3-array@3/+esm')
]);
const getValue = d => +d[aggregateColumn] || 0;
const data = csvParse(csvString).filter(d => d[filterColumn] == filterValue);
const aggregated = rollup(
data,
g => operation === 'count' ? g.length : (operation === 'sum' ? sum : mean)(g, getValue),
d => d[groupBy]
);
return Array.from(aggregated, ([key, result]) => ({ [groupBy]: key, result }));
};
export default processCSV;