通常这是你在javascript中获取随机数的方式。
Math.random();
然而,当涉及生成随机整数时,这种方法效率似乎很低。
首先,随机函数必须生成随机小数,如 0.1036098338663578 ,然后必须将其乘以合适的范围( 10.464593220502138 )。最后,floor函数减去小数以产生结果(在这种情况下, 10 )。
var random_integer = Math.floor(Math.random()*101);
有没有更快的方法在javascript中生成随机整数?
我用它来创建一个画布HTML5游戏。 FPS大约是50,除了生成随机数之外,我的代码已经过优化。
答案 0 :(得分:21)
这段代码更快......输入。
var random_integer = Math.random()*101|0;
虽然它不适用于大量的数字。
(并且运行速度不快,至少不会运行。)
如果你事先生成随机数,你可以在游戏中获得更快的速度。
for (var i=1e6, lookupTable=[]; i--;) {
lookupTable.push(Math.random()*101|0);
}
function lookup() {
return ++i >= lookupTable.length ? lookupTable[i=0] : lookupTable[i];
}
lookup
将在具有一百万个随机整数的数组中旋转。它比调用random
和floor
much faster(当然,生成查找表时会有一个“加载时间”惩罚)。
答案 1 :(得分:2)
你的方法是在javascript中检索随机整数的正确方法,不要担心它会快速运行的性能。
答案 2 :(得分:2)
如果你想避免浮点计算,那么你可以通过编写自己的伪随机数生成器来做到这一点。 Here是众所周知的伪随机数生成器(PRNG)的列表。 Linear congruential generator是最容易实现的,也可能在性能方面最有效。但是,您需要了解theory behind PRNGs以便写出有效的文件。但这可能不值得努力。 JS实现应该足够有效。最后,您很可能会发现Math.random()
的运行速度比您的代码快。
答案 3 :(得分:1)
不,没有更简单或更短的方式。但是,如果需要多次执行此操作,则可以创建一个函数。
答案 4 :(得分:1)
我主要使用
var a = Math.floor(Math.random((number you'd like to be minimum, (number you'd like to be maximum) * (number you'd like to be maximum);
答案 5 :(得分:0)
const getRandomInt = (base = 10) => {
return Math.floor(Math.random() * base)
}
答案 6 :(得分:0)
这是我使用的:
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
如何使用它的一个例子是
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
if(getRandomInt(420) == 69){
console.log("nice")
}
答案 7 :(得分:-1)
这是最短的一线随机数生成器代码
rnd=(a,b)=>~~(Math.random()*(b-a))+a
使用方法:rnd(min,max) 范例:rnd(10,100)