Показать сообщение отдельно
  #7 (permalink)  
Старый 09.11.2017, 21:08
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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
Ответить с цитированием