Pelajaran modul (2/4)
Tantangan: pengurai CSV
Format CSV (Nilai yang Dipisahkan Koma) ada di mana-mana: ekspor dari Excel, dump database, keluaran dari alat baris perintah. Mengurainya adalah tantangan kecil yang menggabungkan split, map, destrukturisasi, dan pembangunan objek.
Formatnya
CSV minimal adalah string multi-baris: baris pertama adalah header (nama kolom), lalu satu baris per catatan dengan bidang dipisahkan dengan koma.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
Tujuan klasiknya adalah mengubahnya menjadi serangkaian objek:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];Resep 3 langkah
- Pisahkan string berdasarkan baris:
csv.split('\n') - Ekstrak baris header: baris pertama, dipisahkan dengan koma
- Petakan setiap baris yang tersisa ke objek, pasangkan setiap bidang dengan header yang cocok
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;
});
}Alternatif yang lebih modern:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Mengonversi tipe
Bidang yang diurai selalu berupa string. Jika Anda mengetahui bahwa beberapa kolom adalah angka:
record.eta = Number(record.eta);Atau tulis "skema" kecil:
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Cobalah
Tentukan `parseCSV(csv)` yang menggunakan string CSV (baris pertama = header, koma sebagai pemisah). Mengembalikan array objek dengan tombol header. Semua nilai tetap sebagai string. Abaikan baris kosong.
Tunjukkan petunjuk
dibagi pada baris baru, baris pertama = header, petakan sisanya, Object.fromEntries.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Tentukan `columnMean(csv, ColumnName)` yang mengurai CSV, mengonversi nilai kolom menjadi angka, dan mengembalikan meannya (angka). Jika tidak ada baris data, kembalikan 0.
Tunjukkan petunjuk
Temukan indeks kolom, petakan baris → Angka, kurangi menjadi jumlah, bagi dengan panjangnya.
Solusi tersedia setelah 3 upaya