Lecciones del módulo (2/4)
Desafío: parser de CSV
El formato CSV (Comma-Separated Values) está en todas partes: exportaciones de Excel, volcados de bases de datos, salidas de herramientas de línea de comandos. Parsearlo es un pequeño desafío que combina split, map, destructuring y construcción de objetos.
El formato
Un CSV mínimo es una cadena multilinea: la primera línea es el encabezado (nombres de las columnas), luego hay una línea por cada registro con los campos separados por comas.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
El objetivo clásico es transformarlo en un array de objetos:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];La receta en 3 pasos
- Divide la cadena por líneas:
csv.split('\n') - Extrae la línea del encabezado: la primera línea, dividida por comas
- Mapea cada línea restante a un objeto, asociando cada campo con su encabezado correspondiente
function parseCSV(csv) {
const righe = csv.split('\n');
const intestazione = righe[0].split(',');
return righe.slice(1).map((riga) => {
const campi = riga.split(',');
const record = {};
intestazione.forEach((nome, i) => {
record[nome] = campi[i];
});
return record;
});
}Alternativas más modernas:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Convertir tipos
Los campos parseados son siempre strings. Si sabes que algunas columnas contienen números:
record.eta = Number(record.eta);O puedes escribir un pequeño "esquema":
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Pruébalo tú
Define `parseCSV(csv)` que reciba una cadena CSV (primera línea = encabezado, comas como separador). Devuelve un array de objetos con las claves del encabezado. Todos los valores siguen siendo strings. Ignora las líneas vacías.
Mostrar pista
split su newline, prima riga = intestazione, map sulle altre, Object.fromEntries.
Solución disponible después de 3 intentos
Ejercicio de repaso
Define `columnMean(csv, columnName)` que parsee el CSV, convierta los valores de la columna a números y devuelva su media (numero). Si no hay líneas de datos, devuelve 0.
Mostrar pista
Trova l'indice della colonna, mappa righe → Number, reduce somma, dividi per length.
Solución disponible después de 3 intentos