2016-07-27 85 views
1

来自这个问题采取随机字母出从字符串不同,因为我不是试图消除从字符串什么。选择从字符串随机字母在JavaScript

我想从JavaScript中使用Math.floor(Math.random()* string.length)和while循环中的字符串中随机选择一个字母。它需要不断地向这个字符串添加新的随机字母,直到指定的长度。

我的代码是:

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次:恩。 PPPPPP

随机字母被从字符串仅生成一次,然后重复,直到指定的长度。我需要它为每个字母生成随机输出:例如。 pwezjm

我也注意到,如果我做了第二个不同,而环比弦,它就会产生相同的输出作为第一个循环:恩。 PPPPPP

我认为这将至少产生不同的随机字母,然后第一循环,但事实并非如此。这是为什么?

+0

这可能会帮助你:http://stackoverflow.com/a/1497512/1516112 – nikoskip

+1

你只生成一个随机字母,并没有改变它。为什么它应该改变? –

回答

6

因为你应该每次都得到这封信,但你只做一次。

var emptyString = ""; 
var alphabet = "abcdefghijklmnopqrstuvwxyz"; 

while (emptyString.length < 6) { 
    emptyString += alphabet[Math.floor(Math.random() * alphabet.length)]; 
} 
console.log(emptyString); 

而且,不知道你想要什么,以实现与emptyString++,移除,因为++是“增量由一个”操作符,你不能incremenent的字符串。我认为目的是将它作为while循环的计数器,但它是不必要的,因为计数器已经是字符串长度了。

+0

如果用于密码生成,不应使用'Math.random()',因为它不是一个密码安全的随机数生成器。相反,创建一个'new Uint32Array(6)',使用'window.crypto.getRandomValues(uintArray);'随机值填充它,然后使用这些数字从字母表中选择数值。它稍微复杂一点,但世界更偏执。 :) –

2

获取在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

+0

@PatrickRoberts - 同意你的看法......更新中... – Rayon

+1

现在,它只是重复我的答案(不要说这是故意的),我不认为有任何需要有它。 – nicael

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);

您也不能增加emptyString,因为它是一个字符串。

1

虽然以上这些都很好。我喜欢较短的代码。

const randomLetter = ('abcdefghijklmnopqrstuvwxyz').split('')[(Math.floor(Math.random() * 26))];