Modül dersleri (2/4)
Zorluk: CSV ayrıştırıcı
CSV biçimi (Virgülle Ayrılmış Değerler) her yerdedir: Excel'den dışa aktarmalar, veritabanı dökümleri, komut satırı araçlarından çıktı. Ayrıştırma, bölünme, harita, yıkım ve nesne inşası.
format
Minimum CSV, çok satırlı bir dizedir: ilk satır başlık (sütun adları), ardından bir satırdır virgülle ayrılmış alanlarla kayıt başına satır.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
Klasik amaç onu bir dizi nesneye dönüştürmektir:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];3 adımlı tarif
- Dizeyi satırlara bölün:
csv.split('\n') - Başlık satırını çıkarın: ilk satır, virgülle bölünmüş
- Her alanı eşleşen başlıkla eşleştirerek kalan her satırı bir nesneyle eşleyin
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;
});
}Daha modern alternatifler:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Türleri dönüştürme
Ayrıştırılan alanlar her zaman dizelerdir. Bazı sütunların sayı olduğunu biliyorsanız:
record.eta = Number(record.eta);Veya küçük bir "şema" yazın:
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Deneyin
Bir CSV dizesi alan `parseCSV(csv)`yi tanımlayın (ilk satır = başlık, ayırıcı olarak virgüller). Başlık tuşlarıyla bir dizi nesne döndürün. Tüm değerler dize olarak kalır. Boş satırları dikkate almayın.
İpucu göster
yeni satıra bölünmüş, ilk satır = başlık, geri kalanının haritası, Object.fromEntries.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
CSV'yi ayrıştıran, sütun değerlerini sayılara dönüştüren ve bunların ortalamasını (sayı) döndüren `columnMean(csv, sütunAdı)` tanımını yapın. Veri satırı yoksa 0 değerini döndürür.
İpucu göster
Sütun indeksini bulun, satırları eşleştirin → Sayı, toplama azaltın, uzunluğa bölün.
3 denemeden sonra çözüm mevcut