我的确切要求是随机返回1到2000之间的所有数字,不应该重复两次。所以我们可以说如果我有
function generateRnNumber(){
var arr = [1,2,3,4,5,6,7,8,9,10,...2000];
randomNumber = Math.floor((Math.random()*2000));
return randomNUmber;
}
因此,如果我调用generateRnNumber一个介于1 - 2000之间的数字(之前没有返回),或者一个唯一的数字,所以如果我调用2000次,我应该以随机顺序获得所有数字。我不想保留一个包含2000个元素的数组。请帮我写这个函数。
答案 0 :(得分:-1)
保持包含所有可能值的数组并随机化顺序。当你需要一个随机值时,弹出数组(删除值"可能的值" -array)。
要做到这一点,否则你无论如何都需要一个数组来保持"采取"因此我不认为你可以绕过你的"值范围大小的数组"。
答案 1 :(得分:-1)
你可以这样洗牌:
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
用法:
var myArray = [];
for(var i = 1; i <= 2000; i++) {
myArray.push(i);
}
var randomArray = shuffle(myArray).splice(0, 10); // an array with 10 random numbers varrying from 1-2000