Skip to main content

JavaScript function that converts comma-separated values (CSV) from a string, into a 2D Array.

/**
 * CSVToArray
 *
 * Converts a comma-separated values (CSV) string to a 2D array.
 *
 * Use `Array.prototype.slice()` and `Array.prototype.indexOf('\n')` to remove
 * the first row (title row) if `omitFirstRow` is `true`. Use
 * `String.prototype.split('\n')` to create a string for each row, then
 * String.prototype.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.
 *
 * @param {String} data The CSV string of data.
 * @param {String} delimiter The field delimiting character.
 * @param {Boolean} omitFirstRow Whether or not to omit the header/first row.
 * @return {Array} The comma-separated values (CSV) string as a 2D Array.
 */
const CSVToArray = (data, delimiter = ",", omitFirstRow = false) =>
    data
        .slice(omitFirstRow ? data.indexOf("\n") + 1 : 0)
        .split("\n")
        .map(v => v.split(delimiter));

//
// Compiled (ES2015)
var CSVToArray = function CSVToArray(data) {
    var delimiter =
        arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ",";
    var omitFirstRow =
        arguments.length > 2 && arguments[2] !== undefined
            ? arguments[2]
            : false;

    return data
        .slice(omitFirstRow ? data.indexOf("\n") + 1 : 0)
        .split("\n")
        .map(function(v) {
            return v.split(delimiter);
        });
};

// --------------------------------------------------
// Example Usage
// --------------------------------------------------

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']];