JSFiddle - React, Tailwind, and code Playground

by john_s

HTML

<div id="output">
</div>

JavaScript

function formatRange(values, options) {
    options = $.extend({ useSpaces: false, useAmpersand: false }, options);
    var comma = options.useSpaces ? ', ' : ',',
        dash = options.useSpaces ? ' - ' : '-',
        ampersand = options.useAmpersand ? (options.useSpaces ? ' & ' : '&') : comma;
    var result = '';
    if (values.length > 0) {
        result += values[0];
        if (values.length > 1) {
            for (var i = 1; i < values.length; i++) {
                if (((i + 1) < values.length)
                        && (values[i] == (values[i - 1] + 1))
                        && (values[i + 1] == (values[i] + 1))) {
                    result += dash;
                    i++;
                    while (((i + 1) < values.length)
                           && (values[i] == (values[i - 1] + 1))
                           && (values[i + 1] == (values[i] + 1))) {
                        i++;
                    }
                } else {
                    result += (i == (values.length - 1)) ? ampersand : comma;
                }
                result += values[i];
            }
        }
    }
    return result;
}

$('#output').text(formatRange([1, 2, 4, 6, 7], { useSpaces: true }));