JSFiddle - React, Tailwind, and code Playground
by Sahin Deniz
JavaScript
function getRanges(values, separator = "-") {
let fixed = [];
let ranges = values
.slice()
.sort((p, q) => p - q)
.reduce((acc, cur, idx, src) => {
if (idx > 0 && cur - src[idx - 1] === 1) acc[acc.length - 1][1] = cur;
else acc.push([cur]);
return acc;
}, [])
.map(range => {
let [n0, n1] = range;
if (n0 + 1 !== n1) return range;
fixed.push([n1]);
return [n0];
});
ranges.push(...fixed);
return ranges
.sort()
.map(range => range.join(separator));
}
console.log(getRanges([1, 2, 4, 5, 6, 7, 57]));