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;

}