Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2017, 13:24
Новичок на форуме
Отправить личное сообщение для УмкаДима Посмотреть профиль Найти все сообщения от УмкаДима
 
Регистрация: 09.11.2017
Сообщений: 2

Скрипт для генерации числа
Добрый день. Помогите написать скрипт для генерации одного числа, которое не повторяется при повторной генерации.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2017, 13:27
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Если любое число:
var getNumber = (function() {
  var n = 0;
  return function() { return ++n; };
})();


Если случайное, то надо запоминать какие уже были.
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2017, 13:28
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

function get_uniqu_id(){
    return (new Date()).getTime()+Math.random();
}
alert(get_uniqu_id());
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2017, 13:30
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

var getUniqRandomInt = (function() {

    var numbers = [];

    return function fn(max) {
        var n = Math.floor(Math.random() * (max - min + 1)) + min;

        if(numbers.indexOf(n) !== -1) {
              n = fn(max);
        }

        numbers.push(n);

        return n;
    };
})();

Последний раз редактировалось ruslan_mart, 09.11.2017 в 20:36.
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2017, 13:32
Новичок на форуме
Отправить личное сообщение для УмкаДима Посмотреть профиль Найти все сообщения от УмкаДима
 
Регистрация: 09.11.2017
Сообщений: 2

Спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2017, 13:46
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

ruslan_mart,
Сниппет? Код нужно поправить
Ответить с цитированием
  #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
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2017, 21:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

ruslan_mart,
сортировка зачем?
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2017, 21:26
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

любопытный вариант )
у меня в Хроме глубина вызовов до переполнения стека оказалась всего 8952.

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

рони, если вдруг передашь сначала max, а потом - min.

getUniqueRandomInt(10, 3); //3-10


Alexandroppolus, тогда даже не знаю, какой способ тут можно придумать. С одной стороны, вряд ли кому-либо нужно будет генерировать столько случайных чисел, а с другой... надо подумать как лучше это организовать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт версии для слабовидящих yotobo Общие вопросы Javascript 0 02.04.2017 21:23
нужна помощь (есть работа) Редирект скрипт для iOS 9+ Возможно на AngularJS dimazap Мобильный JavaScript 1 20.01.2017 18:46
Где найти скрипт - Социальный Замок для html ? klimentino Общие вопросы Javascript 1 25.10.2013 06:39
скрипт для браузерки ванка Общие вопросы Javascript 11 11.10.2013 12:20
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00