UNPKG

color-name-list

Version:
95 lines (78 loc) 2.34 kB
/** * takes a CSV string an parse it * @param {String} csvString CSV file contents * @param {String} csvDelimitor * @param {String} csvNewLine * @return {Object} Object with all entries, headers as Array, * and entires per header as Array */ export const parseCSVString = ( csvString, csvDelimitor = ',', csvNewLine = '\r\n' ) => { const rows = csvString.split(csvNewLine); // remove last empty row (if there is any) if (!rows.slice(-1)[0]) { rows.pop(); } // extracts all the CSV headers const headers = rows.shift().split(csvDelimitor); // collection of values per row const values = {}; headers.forEach((header) => { values[header] = []; }); const entries = rows.map((row) => { // decomposes each row into its single entries const rowArr = row.split(csvDelimitor); // creates an object for for each entry const entry = {}; // populates the entries headers.forEach((header, i) => { const value = rowArr[i]; entry[header] = value; // collects values values[header].push(value); }); return entry; }); return {headers, entries, values}; }; /** * finds duplicates in a simple array * @param {array} arr array of items containing comparable items * @return {array} array of second (or more) instance of duplicate items */ export const findDuplicates = (arr) => { const lookUpObj={}; const dupes = []; arr.forEach((item) => { if (lookUpObj.hasOwnProperty(item)) { dupes.push(item); } lookUpObj[item]=0; }); return dupes; }; export const objArrToString = (arr, keys, options) => { const settings = Object.assign({}, { includeKeyPerItem: false, beforeKey: '', afterKey: '', beforeValue: '', afterValue: '', keyValueSeparator: ':', insertBefore: '', insertAfter: '', rowDelimitor: '\r\n', itemDelimitor: ',', }, options); return settings.insertBefore + arr.map((item) => { return keys.map((key) => { return ( settings.includeKeyPerItem ? settings.beforeKey + key + settings.afterKey + settings.keyValueSeparator : '' ) + settings.beforeValue + item[key] + settings.afterValue; }).join(settings.itemDelimitor); }).join(settings.rowDelimitor) + settings.insertAfter; };