JSFiddle - React, Tailwind, and code Playground
by lollero
JavaScript
var n = [
3,10,11,155,156,157,158, 160,164,165, 163,
170, 171, 172, 173, 174,175,176,177,178, 180,
3, 4,
5,6,7,8,9,0,
170, 171, 172, 173, 174,175,176,177,178, 180,
];
alert( joinNumberRanges( n ) );
function joinNumberRanges( s ) {
s.sort( function( a,b ) { return a - b; });
var vault = [];
var collector = [];
for ( var i = 0; i < s.length; i++ ) {
var sequence_number = s[i];
var collector_last = collector[ collector.length -1 ];
// To avoid problems with multiple same number entries.
if ( sequence_number === collector_last + 1 || sequence_number === collector_last ) {
collector.length = 1;
collector.push( sequence_number );
}
else {
collector_last !== undefined && vault.push( collector.join('-') );
collector.length = 0;
collector.push( sequence_number );
}
}
vault.push( collector.join('-') );
return vault;
}