Math.random和字母混合abcd等

crs*_*sMC 3 javascript random

我正在使用以下代码生成一个随机数:

Math.floor((Math.random() * 9999) * 7);
Run Code Online (Sandbox Code Playgroud)

我得到的一些结果:

45130,
2611,
34509,
36658
Run Code Online (Sandbox Code Playgroud)

我如何得到这样的结果(包括2个字母):

TT45130,
PO2611,
KL34509,
GH36658
Run Code Online (Sandbox Code Playgroud)

问题:

Math.random()携带的数字范围是多少?我可以设置特定的值范围吗?没有必要回答,但只是好奇.

use*_*097 5

您可以使用下面的函数来获取随机大写字符:

function getRandomUppercaseChar() {
    var r = Math.floor(Math.random() * 26);
    return String.fromCharCode(65 + r);
}
Run Code Online (Sandbox Code Playgroud)

因此,要生成使用双字母前缀指定的代码:

function generateCode() {
    var prefix = new Array(2).fill().map(() => getRandomUppercaseChar()).join(""),
        integer = Math.floor((Math.random() * 9999) * 7);
    return prefix + integer;
}
Run Code Online (Sandbox Code Playgroud)

注意:上面的generateCode功能使用现代ES6和ES5 javascript,这在现代环境(如Node.js或当前浏览器)中完全没问题.但是,如果您想要更高的兼容性(例如,为了确保它在旧浏览器中工作),您可以像这样重写它:

function generateCode() {
    var integer = Math.floor((Math.random() * 9999) * 7);
    for (var i = 0, prefix = ""; i < 2; ++i)
        prefix += getRandomUppercaseChar();
    return prefix + integer;
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该总是使用`floor()`而不是`round()`来确保所有结果的概率相等.所以乘以26是对的 (2认同)