Files
lynchmark.com/tests/6_csv_processor/outputs/google_gemini-2.5-pro.js
T

39 lines
921 B
JavaScript

async function processCSV(csv, {
filterColumn,
filterValue,
groupBy,
aggregateColumn,
operation,
}) {
const { default: Papa } = await import(
'https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.js'
);
const { data } = Papa.parse(csv, { header: true, skipEmptyLines: true });
const groups = data.reduce((acc, row) => {
if (row[filterColumn] != filterValue) {
return acc;
}
const key = row[groupBy];
const stats = acc.get(key) || { sum: 0, count: 0 };
stats.sum += Number(row[aggregateColumn]) || 0;
stats.count++;
return acc.set(key, stats);
}, new Map());
const aggregators = {
sum: ({ sum }) => sum,
avg: ({ sum, count }) => (count ? sum / count : 0),
count: ({ count }) => count,
};
return Array.from(groups, ([key, stats]) => ({
[groupBy]: key,
result: aggregators[operation](stats),
}));
}
export default processCSV;