使用Math.random在JavaScript中从一组有限的字符生成随机集

时间:2018-02-03 15:57:37

标签: javascript math random

我需要使用字母A-G和数字5-9生成~6个随机字符。可以使用Math.random完成吗?他们不必每次都是独一无二的。我发现了这个:

Math.floor(0|Math.random()*9e6).toString(36)

它确实运行良好,但我可以修改它以使其使用某些字符(类似replace(/[^a-z]+/g, '')但更具体的方式)而不添加arrays等?

编辑:第五个人的答案在哪里?

3 个答案:

答案 0 :(得分:2)

您可以使用不同的功能,包括所需范围内的字母和数字的不同因素和偏移。

function getRandomLetter() { // A B C D E F G
    return Math.floor(Math.random() * 7 + 10).toString(36).toUpperCase();
    //                                ^       count of wanted letters
    //                                    ^^  offset for the first letter, to get A
    //                                        with a random result of zero
}

function getRandomNumber() { // 5 6 7 8 9
    return Math.floor(Math.random() * 5 + 5).toString(36);
    //                                ^      9 - 5 + 1 or count, as factor
    //                                    ^  offset 
}
    
console.log(getRandomLetter());
console.log(getRandomNumber());

答案 1 :(得分:1)

你可以完全使用Math从数组中挑选随机元素(在这种情况下是构造随机Id代码的字符)并将它们连接到代码字符串中

步骤:

  • 首先使用代码字符串的“building”块创建一个数组。
  • 然后创建一个空字符串来保存代码字符串。
  • 运行循环(次数取决于您希望代码的长度)
  • 数学部分:您需要一个随机索引。为此,您可以使用Math.random()生成一个随机数,它将为您提供0-1之间的值。然后将它乘以构造块数组的长度,以便结果介于0 - array.length之间。然后你将它包装在Math.Floor中,以确保你从这个过程得到一个干净的整数,这将是你的随机索引。
  • 然后,您只需通过拾取数组[randomIndex]并将其连接到codeString,将随机字符添加到codeString。
  • 循环将重复istself,最后你将获得codeString。

代码:

const array = ["A", "B", "C", "D", "E", "F", "G", "5", "6", "7", "8", "9"];
let codeString = "";

for(i=0 ; i<6 ; i++){
    const randomIndex = Math.floor(Math.random()* array.length);
    codeString = codeString + array[randomIndex];
}
console.log(codeString);

答案 2 :(得分:0)

如果出现随机字符的模式并不重要,那么我会做这样的事情

// This function helps us generate a random number between two numbers. 
function random(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

// The characters we need
var characterArray = ["A", "B", "C", "D", "E", "F", "G", 1, 2, 3, 4, 5, 6, 7, 8, 9];

// Now run a loop six times, get a random number between 0 and the length of the characterArray and concatenate it into a new variable

var randomString = "";
for ( var i = 0; i < 6; i++) {
    randomString += characterArray[ random(0, characterArray.length - 1) ];
}

console.log( randomString );

代码可以进一步缩短,例如,而不是实际制作一个字符数组,我们可以分配一个字符串characterArray = "ABCDE...7,8,9"作为一个字符串也是一个字符数组,并为此目的服务,但我认为它以一种不言自明的方式编写它是一个好主意,您可以根据自己的喜好理解和添加或更改代码中的任何内容。

使用一个函数给我们两个数字之间的随机数,我们可以使用一个数组,其中包含我们的结果可以拥有的所有字符。然后,由于我们想要获得一个包含6个不同字符的随机数,我们使用for loop,运行它六次,每次从字符数组中获取一个随机元素,并完成工作。