var UniqueNumber = (function() {
'use strict';
var DEFAULT_MAX = Number.MAX_VALUE;
var DEFAULT_MIN = 0;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function sortCallback(a, b) {
return a - b;
}
function UniqueNumber() {
var range = Array.prototype.slice.call(arguments).sort(sortCallback);
if(range.length < 2) {
range.unshift(DEFAULT_MIN);
if(range.length < 2) {
range.push(DEFAULT_MAX);
}
}
this._cache = [];
this._range = range;
}
UniqueNumber.prototype = {
get: function() {
var cache = this._cache,
range = this._range,
length = range[1] - range[0] + 1,
value;
while(cache.length !== length) {
value = getRandomInt.apply(null, range);
if(cache.indexOf(value) === -1) {
cache.push(value);
return value;
}
}
return NaN;
}
};
return UniqueNumber;
})();
var uniqInt = new UniqueNumber(1, 5);
console.log(uniqInt.get());
console.log(uniqInt.get());
console.log(uniqInt.get());
console.log(uniqInt.get());
console.log(uniqInt.get());
console.log(uniqInt.get()); //NaN