Skip to content

Instantly share code, notes, and snippets.

@amcmillan01
Last active June 18, 2016 00:33
Show Gist options
  • Save amcmillan01/0b04464284a42c1d0f5c4651404d02cc to your computer and use it in GitHub Desktop.
Save amcmillan01/0b04464284a42c1d0f5c4651404d02cc to your computer and use it in GitHub Desktop.
Convert sequence of numbers in an array to range of numbers
/**
* convert sequence of numbers in an array to range of numbers
* @param {Array} arr
* @return {Array}
* @example
* var arrayOfNumbers = [ 2, 3, 4, 5, 475, 476, 477, 478, 479, 6, 8, 9, 10, 400, 480 ];
* var result = convert_number_sequence_to_range(arrayOfNumbers); // => [ '2-6', '8-10', '400', '475-480' ]
*/
var convert_number_sequence_to_range = function(arr) {
var sortedArr = arr.sort(function(a, b) {
return a - b;
});
var start = sortedArr[0];
var prev = start;
var result = [];
var rangeSet = false;
var lastIndex = 0;
sortedArr.forEach(function(current, i) {
if (i === 0) {
result.push('' + current);
lastIndex = 0;
} else {
var next = sortedArr[i + 1] || -1;
// console.log(prev, current, next);
if ((prev + 1) === current && current === (next - 1)) {
if (!rangeSet) {
result[lastIndex] = '' + result[lastIndex] + '-';
}
rangeSet = true;
} else if ((prev + 1) === current) {
rangeSet = false;
result[lastIndex] = '' + result[lastIndex] + current;
lastIndex++;
} else if ((prev + 1) !== current && current !== (next - 1)) {
result[lastIndex] = '' + current;
lastIndex++;
} else if (next > current) {
result[lastIndex] = '' + current;
}
}
prev = current;
});
return result;
};
// var arrayOfNumbers = [ 2, 3, 4, 5, 475, 476, 477, 478, 479, 6, 8, 9, 10, 400, 480 ];
// var result = convert_number_sequence_to_range(arrayOfNumbers);
//
// console.log(arrayOfNumbers);
// console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment