这个问题已经被问过几十次了,但不知何故,在阅读了很多答案后,我并不相信。我不清楚最好的方法、性能和代码简单性。
我是否应该设置列表 [1.. 100] 并继续从那里选择随机数(它将运行 10 次)到另一个数组,避免每次新的随机数都搜索它?
我应该开发并运行 10 次(至少)一个随机函数来返回 1.. 100,检查它是否不是一个骗局并将其放入数组中?
我缺少一些 Javascript 函数吗?
Thanks
您可以使用 while 循环来生成随机数Math.random()
并将数字添加到Set https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set其中仅包含唯一值。
var randoms = new Set();
while(randoms.size<10){
randoms.add(1 + Math.floor(Math.random() * 100));
}
console.log([...randoms.values()]);
您还可以仅使用数组并在将其推送到数组之前检查生成的随机数是否已存在于其中。
var randoms = [];
while(randoms.length<10){
var random = Math.ceil(1 + Math.floor(Math.random() * 100));
if(randoms.indexOf(random)==-1){
randoms.push(random);
}
}
console.log(randoms);
对于更通用的功能,您可以使用:
function generateRandoms(min, max, numOfRandoms, unique){
/*min is the smallest possible generated number*/
/*max is the largest possible generated number*/
/*numOfRandoms is the number of random numbers to generate*/
/*unique is a boolean specifying whether the generated random numbers need to be unique*/
var getRandom = function(x, y){
return Math.floor(Math.random() * (x - y + 1) + y);
}
var randoms = [];
while(randoms.length<numOfRandoms){
var random = getRandom(min, max);
if(randoms.indexOf(random)==-1||!unique){
randoms.push(random);
}
}
return randoms;
}
function generateRandoms(min, max, numOfRandoms, unique){
var getRandom = function(x, y){
return Math.floor(Math.random() * (x - y + 1) + y);
}
var randoms = [];
while(randoms.length<numOfRandoms){
var random = getRandom(min, max);
if(randoms.indexOf(random)==-1||!unique){
randoms.push(random);
}
}
return randoms;
}
console.log(generateRandoms(1, 100, 10, true));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)