JSFiddle - React, Tailwind, and code Playground

HTML

<textarea id="results"></textarea>

JavaScript

var arr = [1, 2, 5, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19];

// uncomment for string test
/*arr = arr.filter(function(item){
    return item.toString()
}).join()*/

document.getElementById('results').value = convert(arr);

function convert(input) {
    var res = [],
        arr = typeof input == 'string' ? input.split(',').map(Number) : input;
    while (arr.length) {
        var curr = arr.shift(),
            lastIncIdx = null;

        if (arr.length && curr == arr[0] - 1) {
            var next = arr.length ? arr.reduce(function (last, curr, idx, arr) {
                if (curr == last + 1) {
                    lastIncIdx = idx;
                    return curr;
                } else {
                    return last;
                }
            }) : curr;

            if (next != curr) {
                arr.splice(0, lastIncIdx + 1);
                res.push(curr + '-' + next)
            }
        } else {
            res.push(curr)
        }
    }
    return res.join();
}