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

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

Последний раз редактировалось ruslan_mart, 10.11.2017 в 11:43.
Ответить с цитированием