Lecții din modul (2/4)
Provocare: parser CSV
Formatul CSV (valori separate prin virgulă) este peste tot: exporturi din Excel, depozite de baze de date, ieșire din instrumentele din linia de comandă. Analizarea este o mică provocare care combină diviziunea, hartă, destructurare și construcție de obiect.
Formatul
Un CSV minim este un șir cu mai multe linii: primul rând este antetul (numele coloanelor), apoi unul rând pe înregistrare cu câmpurile separate prin virgulă.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
Scopul clasic este de a-l transforma într-o serie de obiecte:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];Rețeta în 3 pași
- Divizați șirul pe linii:
csv.split('\n') - Extrage rândul antetului: prima linie, împărțită prin virgulă
- Hartă fiecare linie rămasă la un obiect, asociind fiecare câmp cu antetul potrivit
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;
});
}Alternative mai moderne:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Conversia tipurilor
Câmpurile analizate sunt întotdeauna șiruri. Dacă știți că unele coloane sunt numere:
record.eta = Number(record.eta);Sau scrieți o mică „schemă”:
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Încearcă
Definiți `parseCSV(csv)` care preia un șir CSV (primul rând = antet, virgulă ca separator). Returnează o serie de obiecte cu tastele de antet. Toate valorile rămân ca șiruri. Ignorați rândurile goale.
Afișează indiciu
împărțit pe noua linie, primul rând = antet, hartă peste restul, Object.fromEntries.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Definiți `columnMean(csv, columnName)` care parsează CSV-ul, convertește valorile coloanei în numere și returnează media lor (un număr). Dacă nu există rânduri de date, returnați 0.
Afișează indiciu
Găsiți indexul coloanei, hărți rândurile → Număr, reduceți la sumă, împărțiți la lungime.
Soluție disponibilă după 3 încercări