Скрипт для генерации числа
Добрый день. Помогите написать скрипт для генерации одного числа, которое не повторяется при повторной генерации.
|
Если любое число:
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, время: 06:19. |