我正在尝试制作一个脚本来在两个数字之间选择随机数。但它有时会选择相同的数字。我不想重复相同的数字,直到数组完成。
这是我的代码
$(document).ready(function () {
abc();
test = array();
function abc() {
res = randomXToY(1, 10, 0);
$('#img' + res).fadeTo(1200, 1);
//$(this).addClass('activeImg');
//});
setTimeout(function () {
removeClassImg(res)
}, 3000);
}
function removeClassImg(res) {
$('#img' + res).fadeTo(1200, 0.1);
//$('#img' + res).removeClass('activeImg');
abc();
}
function randomXToY(minVal, maxVal, floatVal) {
var randVal = minVal + (Math.random() * (maxVal - minVal));
return typeof floatVal == 'undefined' ? Math.round(randVal) : randVal.toFixed(floatVal);
}
});
有人对此有所了解......
答案 0 :(得分:1)
您必须维护已生成的数字列表,并检查此列表。如果你发现一个骗局,重新生成一个新号码。
答案 1 :(得分:0)
如果您不希望随机数重复,您必须以某种方式跟踪。
如果你所处理的范围相对较小,你可以创建一个包含所有可能结果的数组,然后随机选择它。
function Randomizer(minVal, maxVal, floatVal){
var possible_results = []; // for larger arrays you can build this using a loop of course
var randomization_array = [];
var count = minVal;
var incrementor = floatVal || 1; // set the distance between possible values (if floatVal equals 0 we round to 1)
while (count <= maxVal) {
possible_results.push(count);
count += incrementor;
}
this.run = function(){
// if randomization_array is empty set posssible results into it
randomization_array = randomization_array.length ? randomization_array : $.merge(randomization_array, possible_results);
// pick a random element within the array
var rand = Math.floor(Math.random()*randomization_array.length);
// return the relevant element
return randomization_array.splice(rand,1)[0];
}
}
并且为了使用它(它为每个可能的范围创建一个专门的对象):
rand = new Randomizer(1,10,0);
rand.run();
请注意,此方法不适用于非常大的范围