دروس الوحدة (2/4)
التحدي: محلل CSV
تنسيق CSV (القيم المفصولة بفواصل) موجود في كل مكان: عمليات التصدير من Excel، وتفريغ قاعدة البيانات، الإخراج من أدوات سطر الأوامر. يعد تحليلها تحديًا صغيرًا يجمع بين تقسيم، خريطة، التدمير وبناء الكائنات.
التنسيق
الحد الأدنى من ملف 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 من المحاولات