Перейти до основного вмісту
Модуль 8 · Урок 2 із 430/32 у курсі~15 min
Модульні уроки (2/4)

Завдання: аналізатор CSV

Формат CSV (значення, розділені комами) є всюди: експорт із Excel, дампи бази даних, вихід з інструментів командного рядка. Розбір — це невелике завдання, яке поєднує в собі split, map, деструктуризація та конструювання об’єктів.

Формат

Мінімальний CSV — це багаторядковий рядок: перший рядок — це заголовок (назви стовпців), потім один рядок на запис із полями, розділеними комами.

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

Класична мета — перетворити його на масив об’єктів:

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

Рецепт в 3 кроки

  1. Розділіть рядок на рядки: csv.split('\n')
  2. Витягніть рядок заголовка: перший рядок, розділений комою
  3. Зіставте кожен рядок, що залишився, на об’єкт, поєднавши кожне поле з відповідним заголовком
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;
  });
}

Більш сучасні альтернативи:

JS
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));

Перетворення типів

Розібрані поля завжди є рядками. Якщо ви знаєте, що деякі стовпці є числами:

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

Або напишіть невелику «схему»:

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

Спробуйте

вправи#js.m8.l2.e1
Спроби: 0Завантаження…

Визначте `parseCSV(csv)`, який приймає рядок CSV (перший рядок = заголовок, коми як роздільники). Повертає масив об’єктів із ключами заголовка. Усі значення залишаються як рядки. Ігнорувати порожні рядки.

Завантаження редактора…
Показати підказку

розділити на новий рядок, перший рядок = заголовок, відобразити решту, Object.fromEntries.

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m8.l2.e2
Спроби: 0Завантаження…

Визначте `columnMean(csv, columnName)`, який аналізує CSV, перетворює значення стовпця на числа та повертає їхнє середнє значення (число). Якщо рядків даних немає, повертається 0.

Завантаження редактора…
Показати підказку

Знайти індекс стовпця, відобразити рядки → Число, звести до суми, поділити на довжину.

Рішення доступне після 3 спроб