Skip to content

Instantly share code, notes, and snippets.

@callmehiphop
Created July 23, 2014 20:22
Show Gist options
  • Save callmehiphop/bcf1d3e8e6392d5696a8 to your computer and use it in GitHub Desktop.
Save callmehiphop/bcf1d3e8e6392d5696a8 to your computer and use it in GitHub Desktop.
Formats large array of numbers into a string showing any ranges within the original array
ranger([1,2,3,5,7,8,9]) // "1:3,5,7:9"
(function (root, factory) {
if (typeof define !== 'undefined' && define.amd) {
define(factory);
}
else if (typeof module === 'object') {
module.exports = factory();
}
else {
root.ranger = factory();
}
}(this, function () {
function isNext (number, nextNumber) {
return (number + 1) === nextNumber;
}
function group (groups, number) {
var group = groups[groups.length - 1];
if (!group.length || group.length === 1 && isNext(group[0], number)) {
group.push(number);
}
else if (isNext(group[1], number)) {
group[1] = number;
}
else {
groups.push([number]);
}
return groups;
}
function joinGroups (group) {
return group.join(':');
}
function ranger (numbers) {
return numbers.reduce(group, [[]]).map(joinGroups).join();
}
return ranger;
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment