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

25 lines
848 B
JavaScript

const processCSV = async (csvString, { filterColumn, filterValue, groupBy, aggregateColumn, operation }) => {
const [{ default: { parse } }, { rollup, sum, mean }] = await Promise.all([
import('https://esm.sh/papaparse@5.4.1'),
import('https://esm.sh/d3-array@3.2.4')
]);
const getNum = row => {
const val = parseFloat(row[aggregateColumn]);
return isNaN(val) ? 0 : val;
};
const rows = parse(csvString, { header: true, skipEmptyLines: true }).data
.filter(row => row[filterColumn] == filterValue);
const grouped = rollup(
rows,
group => operation === 'count' ? group.length :
operation === 'sum' ? sum(group, getNum) :
mean(group, getNum),
row => row[groupBy]
);
return Array.from(grouped, ([key, result]) => ({ [groupBy]: key, result }));
};
export default processCSV;