diff --git a/snippets/CSVToArray.md b/snippets/CSVToArray.md new file mode 100644 index 000000000..5f58d4def --- /dev/null +++ b/snippets/CSVToArray.md @@ -0,0 +1,19 @@ +### CSVToArray + +Converts a comma-separated values (CSV) string to a 2D array. + +Use `Array.slice()` and `Array.indexOf('\n')` to remove the first row (title row) if `omitFirstRow` is `true`. +Use `String.split('\n')` to create a string for each row, then `String.split(delimiter)` to separate the values in each row. +Omit the second argument, `delimiter`, to use a default delimiter of `,`. +Omit the third argument, `omitFirstRow`, to include the first row (title row) of the CSV string. + +```js +const CSVToArray = (data, delimiter = ',', omitFirstRow = false) => + data.slice(omitFirstRow ? data.indexOf('\n')+1 : 0).split('\n').map(v => v.split(delimiter)); +``` + +```js +CSVToArray('a,b\nc,d'); // [['a','b'],['c','d']]; +CSVToArray('a;b\nc;d', ';'); // [['a','b'],['c','d']]; +CSVToArray('col1,col2\na,b\nc,d', ',', true); // [['a','b'],['c','d']]; +``` diff --git a/snippets/arrayToCSV.md b/snippets/arrayToCSV.md index 73c3feb28..eecce9d99 100644 --- a/snippets/arrayToCSV.md +++ b/snippets/arrayToCSV.md @@ -4,7 +4,7 @@ Converts a 2D array to a comma-separated values (CSV) string. Use `Array.map()` and `String.join(delimiter)` to combine individual 1D arrays (rows) into strings. Use `String.join('\n')` to combine all rows into a CSV string, separating each row with a newline. -Omit the second argument, `delimiter` to use a default delimiter of `,`. +Omit the second argument, `delimiter`, to use a default delimiter of `,`. ```js const arrayToCSV = (arr, delimiter = ',') => arr.map(v => v.join(delimiter)).join('\n'); diff --git a/tag_database b/tag_database index 23dc0f00a..805fe69e2 100644 --- a/tag_database +++ b/tag_database @@ -39,6 +39,7 @@ counter:browser,advanced countOccurrences:array createElement:browser,utility createEventHub:browser,event,advanced +CSVToArray:string,array,utility currentURL:browser,url curry:function,recursion debounce:function diff --git a/test/CSVToArray/CSVToArray.js b/test/CSVToArray/CSVToArray.js new file mode 100644 index 000000000..ea7c5eea5 --- /dev/null +++ b/test/CSVToArray/CSVToArray.js @@ -0,0 +1,3 @@ +const CSVToArray = (data, delimiter = ',', omitFirstRow = false) => +data.slice(omitFirstRow ? data.indexOf('\n')+1 : 0).split('\n').map(v => v.split(delimiter)); +module.exports = CSVToArray; \ No newline at end of file diff --git a/test/CSVToArray/CSVToArray.test.js b/test/CSVToArray/CSVToArray.test.js new file mode 100644 index 000000000..dbab087d3 --- /dev/null +++ b/test/CSVToArray/CSVToArray.test.js @@ -0,0 +1,18 @@ +const expect = require('expect'); +const CSVToArray = require('./CSVToArray.js'); + +test('CSVToArray is a Function', () => { + expect(CSVToArray).toBeInstanceOf(Function); +}); +test('CSVToArray works with default delimiter', () => { + expect(CSVToArray('a,b\nc,d')).toEqual([['a','b'],['c','d']]); +}); +test('CSVToArray works with custom delimiter', () => { + expect(CSVToArray('a;b\nc;d', ';')).toEqual([['a','b'],['c','d']]); +}); +test('CSVToArray omits the first row', () => { + expect(CSVToArray('col1,col2\na,b\nc,d', ',', true)).toEqual([['a','b'],['c','d']]); +}); +test('CSVToArray omits the first row and works with a custom delimiter', () => { + expect(CSVToArray('col1;col2\na;b\nc;d', ';', true)).toEqual([['a','b'],['c','d']]); +});