JSFiddle - React, Tailwind, and code Playground

CSV to Array

by skibulk

JavaScript

// http://code.google.com/p/csv-to-array/

function csvToArray(str, opts) {
    var o = {
        'fSep': ',',
        'rSep': '\r\n',
        'quot': '"',
        'head': false,
        'trim': false
    }
    for (var i in opts) {
        o[i] = opts[i];
    }
    var a = [
        ['']
    ];
    for (var r = f = p = q = 0; p < str.length; p++) {
        switch (c = str.charAt(p)) {
            case o.quot:
                if (q && str.charAt(p + 1) == o.quot) {
                    a[r][f] += o.quot;
                    ++p;
                } else {
                    q ^= 1;
                }
                break;
            case o.fSep:
                if (!q) {
                    if (o.trim) {
                        a[r][f] = a[r][f].replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                    }
                    a[r][++f] = '';
                } else {
                    a[r][f] += c;
                }
                break;
            case o.rSep.charAt(0):
                if (!q && (!o.rSep.charAt(1) || (o.rSep.charAt(1) && o.rSep.charAt(1) == str.charAt(p + 1)))) {
                    if (o.trim) {
                        a[r][f] = a[r][f].replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                    }
                    a[++r] = [''];
                    a[r][f = 0] = '';
                    if (o.rSep.charAt(1)) {
                        ++p;
                    }
                } else {
                    a[r][f] += c;
                }
                break;
            default:
                a[r][f] += c;
        }
    }
    if (a[a.length - 1].length < a[0].length) {
        a.pop();
    }
    if (o.head) {
        var row, col, head = a.shift(),
            map;
        for (row = 0; row < a.length; row++) {
            map = {};
            for (col = 0; col < head.length; col++) {
                map[head[col]] = a[row][col];
            }
            a[row] = map;
        }
    }
    return a;
}

var csv =
    'Header...