Модульні уроки (2/4)
Завдання: аналізатор CSV
Формат CSV (значення, розділені комами) є всюди: експорт із Excel, дампи бази даних, вихід з інструментів командного рядка. Розбір — це невелике завдання, яке поєднує в собі split, map, деструктуризація та конструювання об’єктів.
Формат
Мінімальний CSV — це багаторядковий рядок: перший рядок — це заголовок (назви стовпців), потім один рядок на запис із полями, розділеними комами.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
Класична мета — перетворити його на масив об’єктів:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];Рецепт в 3 кроки
- Розділіть рядок на рядки:
csv.split('\n') - Витягніть рядок заголовка: перший рядок, розділений комою
- Зіставте кожен рядок, що залишився, на об’єкт, поєднавши кожне поле з відповідним заголовком
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;
});
}Більш сучасні альтернативи:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Перетворення типів
Розібрані поля завжди є рядками. Якщо ви знаєте, що деякі стовпці є числами:
record.eta = Number(record.eta);Або напишіть невелику «схему»:
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Спробуйте
Визначте `parseCSV(csv)`, який приймає рядок CSV (перший рядок = заголовок, коми як роздільники). Повертає масив об’єктів із ключами заголовка. Усі значення залишаються як рядки. Ігнорувати порожні рядки.
Показати підказку
розділити на новий рядок, перший рядок = заголовок, відобразити решту, Object.fromEntries.
Рішення доступне після 3 спроб
Повторна вправа
Визначте `columnMean(csv, columnName)`, який аналізує CSV, перетворює значення стовпця на числа та повертає їхнє середнє значення (число). Якщо рядків даних немає, повертається 0.
Показати підказку
Знайти індекс стовпця, відобразити рядки → Число, звести до суми, поділити на довжину.
Рішення доступне після 3 спроб