这个问题不同于从字符串中取出随机字母,因为我不是要从字符串中删除任何内容。
我试图使用Math.floor(Math.random()* string.length)和while循环从JavaScript中的字符串中选择一个随机字母。它需要不断向该字符串添加新的随机字母,直到达到指定的长度。
我的代码是:
var emptyString = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
var getRandomLetter = alphabet[Math.floor(Math.random() * alphabet.length)];
var randomLetter = getRandomLetter;
while (emptyString.length < 6) {
emptyString += randomLetter;
emptyString ++;
}
console.log(emptyString);
问题: 输出是相同的字母6次:ex。 PPPPPP
随机字母仅从字符串生成一次,然后重复直到指定的长度。我需要它为每个字母生成随机输出:ex。 pwezjm
我还注意到,如果我在字符串上执行第二个不同的while循环,它将生成与第一个循环相同的输出:ex。 pppppp
我认为它至少会产生一个不同的随机字母,然后是第一个循环,但事实并非如此。那是为什么?
答案 0 :(得分:8)
因为你每次都应该获得这封信,但你只需要一次。
var emptyString = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
while (emptyString.length < 6) {
emptyString += alphabet[Math.floor(Math.random() * alphabet.length)];
}
console.log(emptyString);
另外,不确定你想要用emptyString++
实现什么,删除它,因为++
是“递增一个”运算符,你不能增加一个字符串。我认为目的是让它作为while循环的计数器,但它是不必要的,因为计数器已经是字符串长度。
答案 1 :(得分:3)
获取loop
在您的示例中,您只从数组中获取一次随机字符,因此您无法在while loop
中获得另一个随机字符
另请注意,emptyString++
会导致结果为NaN
,因为您尝试后期增加string
var emptyString = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
while (emptyString.length < 6) {
emptyString += alphabet[Math.floor(Math.random() * alphabet.length)];
}
console.log(emptyString);
另一个提示alphabet.length
可以缓存,而不是每次while
答案 2 :(得分:2)
虽然上述内容很好。我喜欢更短的代码。
const randomLetter = ('abcdefghijklmnopqrstuvwxyz').split('')[(Math.floor(Math.random() * 26 ))];
答案 3 :(得分:0)
您需要将getRandomLetter
更改为一个函数,并在循环中重新分配randomLetter
,如下所示:
var emptyString = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
function getRandomLetter() {
return alphabet[Math.floor(Math.random() * alphabet.length)];
}
var randomLetter;
while (emptyString.length < 6) {
randomLetter = getRandomLetter();
emptyString += randomLetter;
}
console.log(emptyString);
&#13;
您也无法增加emptyString
,因为它是一个字符串。