我该如何在 JavaScript 中生成在两个指定变量之间的随机整数,例如 x = 4
和 y = 8
会输出 4, 5, 6, 7, 8
中的任意一个?
我该如何在 JavaScript 中生成在两个指定变量之间的随机整数,例如 x = 4
和 y = 8
会输出 4, 5, 6, 7, 8
中的任意一个?
我的生成0到n之间随机数的方法,其中n <= 10(不包括n):
Math.floor((Math.random() * 10) % n)
当两个输入都是整数时,此实现可行。
function randomRange(myMin, myMax) {
return Math.floor(
Math.random() * (Math.ceil(myMax) - Math.floor(myMin) + 1) + myMin
);
}
使用现代JavaScript + Lodash:
const generateRandomNumbers = (max, amount) => {
const numbers = [...Array(max).keys()];
const randomNumbers = sampleSize(numbers, amount);
return randomNumbers.sort((a, b) => a - b);
};
另外,还有一个TypeScript版本:
const generateRandomNumbers = (max: number, amount: number) => {
const numbers = [...Array(max).keys()];
const randomNumbers: number[] = sampleSize(numbers, amount);
return randomNumbers.sort((a: number, b: number) => a - b);
};
get_random_int = function(args={})
{
let def_args =
{
min: 0,
max: 1,
exclude: false,
seed: Math.random
}
args = Object.assign(def_args, args)
let num = Math.floor(args.seed() * (args.max - args.min + 1) + args.min)
if(args.exclude)
{
let diff = args.max - args.min
let n = num
for(let i=0; i<diff*2; i++)
{
if(args.exclude.includes(n))
{
if(n + 1 <= args.max)
{
n += 1
}
else
{
n = args.min
}
}
else
{
num = n
break
}
}
}
return num
}
它可以像这样使用:
let n = get_random_int
(
{
min: 0,
max: some_list.length - 1,
exclude: [3, 6, 5],
seed: my_seed_function
}
)
或者更简单地说:
let n = get_random_int
(
{
min: 0,
max: some_list.length - 1
}
)
然后你可以这样做:
let item = some_list[n]
要点:https://gist.github.com/madprops/757deb000bdec25776d5036dae58ee6e
为了获得最佳性能,您可以简单地使用:
var r = (Math.random() * (maximum - minimum + 1) ) << 0
maximum
和minimum
的变量。 - Koby Douekrandom(min, max) 生成一个在min(包含)和max(不包含)之间的随机数
Math.floor 将数字向下舍入到最近的整数
function generateRandomInteger(min, max) {
return Math.floor(random(min, max))
}
如果想要生成一个介于4和8之间的随机整数(包括4和8),可以使用以下参数调用上述函数:
generateRandomInteger(4, 9)
// Example
function ourRandomRange(ourMin, ourMax) {
return Math.floor(Math.random() * (ourMax - ourMin + 1)) + ourMin;
}
ourRandomRange(1, 9);
// Only change code below this line.
function randomRange(myMin, myMax) {
var a = Math.floor(Math.random() * (myMax - myMin + 1)) + myMin;
return a; // Change this line
}
// Change these values to test your function
var myRandom = randomRange(5, 15);
Math.random()
会生成一个16位小数,获取最大随机正整数的方法如下:Math.floor(Math.random()*10**16)
值得注意的是已接受答案未能正确处理min大于max的情况。以下是一个例子:
min = Math.ceil(2);
max = Math.floor(1);
for(var i = 0; i < 25; i++) {
console.log(Math.floor(Math.random() * (max - min + 1)) + min);
}
for(var i = 0; i < 25; i++) console.log(rando(2, 1));
<script src="https://randojs.com/1.0.0.js"></script>
它还处理负数、零和其他你所期望的一切。如果你需要使用浮点数或其他变量类型,也有相应的选项,但我不会在这里讨论它们。它们在网站上,如果需要可以深入了解。最后一个原因非常明显。从风格上来说,它更加清晰易读。
randojs.com使得这个和许多其他常见的随机性问题变得强大、可靠,同时也像这样简单易读:
console.log(rando(20, 30));
<script src="https://randojs.com/1.0.0.js"></script>
npm
包,我相信。 - Max Carroll我在网页上找到了一些有趣的内容:
function randomInt(e,t){return Math.floor(Math.random()*(t-e+1)+e)}