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();
}