Ana içeriğe geç
Modül 8 · Ders 2 ders 4Kurstaki 30/32~15 min
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.

Code
nome,eta,citta
Alice,30,Roma
Bob,25,Milano

Klasik amaç onu bir dizi nesneye dönüştürmektir:

JS
[
  { nome: 'Alice', eta: '30', citta: 'Roma' },
  { nome: 'Bob', eta: '25', citta: 'Milano' },
];

3 adımlı tarif

  1. Dizeyi satırlara bölün: csv.split('\n')
  2. Başlık satırını çıkarın: ilk satır, virgülle bölünmüş
  3. Her alanı eşleşen başlıkla eşleştirerek kalan her satırı bir nesneyle eşleyin
JS
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:

JS
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:

JS
record.eta = Number(record.eta);

Veya küçük bir "şema" yazın:

JS
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
  const v = campi[i];
  record[nome] = numeriche.has(nome) ? Number(v) : v;
});

Deneyin

Egzersiz#js.m8.l2.e1
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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

Egzersiz#js.m8.l2.e2
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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