Files
JS/02_advanced/uebungen/u26_csv-quotes2/index-phil.js
Philippe Torrel e0bd3930d9 feat: added 03_dom
2026-07-13 10:38:22 +02:00

63 lines
1.4 KiB
JavaScript

import fs from 'node:fs';
import color from 'chalk';
const data = fs.readFileSync('data/products.csv', 'utf-8');
const toCamelCase = (str) => {
return str
.trim()
.toLowerCase()
.replace(/[^a-zA-Z0-9]+(.)/g, (match, chr) => chr.toUpperCase());
};
const convertCsvToJson = (products, ar) => {
const resultAr = products.map((str) => {
const fields = str.split(/\s*,\s*/);
const labels = ar.map((label, idx) => {
return [label, isNaN(fields[idx]) ? fields[idx] : Number(fields[idx])];
});
const obj = Object.fromEntries(labels);
// console.log(labels); // Entries Array
//console.log(obj);
return obj;
// return {
// [ar[0]]: fields[0],
// [ar[1]]: fields[1],
// [ar[2]]: fields[2],
// [ar[3]]: Number(fields[3]),
// [ar[4]]: Number(fields[4]),
// };
});
// console.log(resultAr);
const jsonStr = JSON.stringify(resultAr, '', 2);
fs.writeFile('products.json', jsonStr, 'utf-8', (err) => {
if (err) {
console.log(err);
} else {
console.log(color.green('file created!'));
}
});
};
const productAr = data
.split('\n')
.map((row) => row.replace('\n', ''))
.filter((row) => row !== '');
const headerAr = productAr
.shift()
.split(/\s*,\s*/)
.map(toCamelCase);
// console.log('=======');
// console.log(productAr);
convertCsvToJson(productAr, headerAr);