Lompati ke konten utama
Modul 8 · Pelajaran 2 dari 430/32 dalam kursus~15 min
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.

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

Tujuan klasiknya adalah mengubahnya menjadi serangkaian objek:

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

Resep 3 langkah

  1. Pisahkan string berdasarkan baris: csv.split('\n')
  2. Ekstrak baris header: baris pertama, dipisahkan dengan koma
  3. Petakan setiap baris yang tersisa ke objek, pasangkan setiap bidang dengan header yang cocok
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;
  });
}

Alternatif yang lebih modern:

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

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

Atau tulis "skema" kecil:

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

Cobalah

Latihan#js.m8.l2.e1
Upaya: 0Memuat…

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.

Memuat editor…
Tunjukkan petunjuk

dibagi pada baris baru, baris pertama = header, petakan sisanya, Object.fromEntries.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#js.m8.l2.e2
Upaya: 0Memuat…

Tentukan `columnMean(csv, ColumnName)` yang mengurai CSV, mengonversi nilai kolom menjadi angka, dan mengembalikan meannya (angka). Jika tidak ada baris data, kembalikan 0.

Memuat editor…
Tunjukkan petunjuk

Temukan indeks kolom, petakan baris → Angka, kurangi menjadi jumlah, bagi dengan panjangnya.

Solusi tersedia setelah 3 upaya