const csv = require('csvtojson') const csvPicker = document.getElementById('csvFile') csvPicker.addEventListener("change", handleFiles, false); function handleFiles() { const csvFilePath = this.files[0] let reader = new FileReader() reader.readAsText(csvFilePath) reader.onload = () => makeTable(reader.result) } // Which components should we remove from the BOM? const rejectedParts = [ 'TP1', 'TP2', 'TP3', 'G', 'U$1', 'J1', 'J2', 'INPUT' ] function generateTableHead(table, data) { let thead = table.createTHead(); let row = thead.insertRow(); // Populate Header row for (let key of data) { let th = document.createElement("th"); let text = document. createTextNode(key); th.appendChild(text); row.appendChild(th); } } function generateTableBody (table, data) { for (let element of data) { let row = table.insertRow(); for (key in element) { let cell = row.insertCell(); let text = document.createTextNode(element[key]); cell.appendChild(text); } } } // Return false if the Part value of the object passed in is in the list to remove function isJunk (element) { return !rejectedParts.includes(element.Part); } function makeTable(csvString) { csv({ delimiter: ";", includeColumns: /(Part|Value)/, ignoreEmpty: true }) .fromString(csvString) .then(jsonObj => { // Create array containing only relevant parts let parts = jsonObj.filter(isJunk) // console.log(parts) let table = document.querySelector("table") let headerData = Object.keys(parts[0]) generateTableBody(table, parts) generateTableHead(table, headerData) }); }