Скрипт для генерации числа
Добрый день. Помогите написать скрипт для генерации одного числа, которое не повторяется при повторной генерации.
|
Если любое число:
var getNumber = (function() { var n = 0; return function() { return ++n; }; })(); Если случайное, то надо запоминать какие уже были. |
function get_uniqu_id(){ return (new Date()).getTime()+Math.random(); } alert(get_uniqu_id()); |
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,
Сниппет? Код нужно поправить:) |
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 |
ruslan_mart,
сортировка зачем? |
любопытный вариант )
у меня в Хроме глубина вызовов до переполнения стека оказалась всего 8952. соответственно, на интервале, скажем, (1...100000) наны начнут выскакивать задолго до исчерпания интервала :) |
рони, если вдруг передашь сначала max, а потом - min. :)
getUniqueRandomInt(10, 3); //3-10 Alexandroppolus, тогда даже не знаю, какой способ тут можно придумать. С одной стороны, вряд ли кому-либо нужно будет генерировать столько случайных чисел, а с другой... надо подумать как лучше это организовать. :write: |
Часовой пояс GMT +3, время: 04:16. |