Rasy, да, в торопяк писал. Я тут получше решение придумал:
var getUniqueRandomInt = (function() {
var DEFAULT_MAX = Number.MAX_VALUE;
var DEFAULT_MIN = 0;
var cacheValues = [];
function getRandomInt(min, max) {
var value = Math.floor(Math.random() * (max - min + 1)) + min;
return cacheValues.indexOf(value) !== -1 ? getRandomInt(min, max) : value;
}
return function() {
var range = Array.prototype.slice.call(arguments).sort();
if(range.length < 2) {
range.unshift(DEFAULT_MIN);
if(range.length < 2) {
range.push(DEFAULT_MAX);
}
}
try {
var value = getRandomInt.apply(null, range);
cacheValues.push(value);
return value;
}
catch(exp) {
return NaN;
}
};
})();
console.log(getUniqueRandomInt(1, 3)); //1-3
console.log(getUniqueRandomInt(3, 2)); //2-3
console.log(getUniqueRandomInt(3)); //0-3
console.log(getUniqueRandomInt(0, 3)); // 0-3
console.log(getUniqueRandomInt(3)); //NaN