Last active
June 18, 2016 00:33
-
-
Save amcmillan01/0b04464284a42c1d0f5c4651404d02cc to your computer and use it in GitHub Desktop.
Convert sequence of numbers in an array to range of numbers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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