JavaScript密码生成器 - 来自数组的多个随机值

时间:2017-05-22 14:03:38

标签: javascript arrays function random

我是JavaScript的新手,并且几天来一直在与这个相对简单的程序作斗争。

程序:我的网站上有一个按钮。单击该按钮时,将生成密码(从阵列中)并显示给用户。

问题:"函数generate()"显示单个相同的生成字符10次,而不是10次10​​个不同的字符,这自然会使密码更强。我希望它将10个不同的字符随机分配到密码中,而不是相同的字符10次。所以该计划有效,但不是我想要的。

我创建了一个包含评论的JSfiddle 以供显示。请注意,在JSfiddle中禁用了document.write,因此结果设置为在控制台中显示。

https://jsfiddle.net/ohstmbym/

<!DOCTYPE html>
<html>
  <head>
  <title></title>
  <button onclick="generate()">Button</button>
  </head>
<body>
<script>
  var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
  randomLetter = arr[Math.floor(arr.length * Math.random())];
  function generate () {for (i = 0; i < 10; i++) {document.write(randomLetter); } }
</script>
</body>
</html>

重要:我想了解代码有什么问题/如何修复它 - 我不只是在寻找有人为我解决它的问题说明。如果你想帮助我解决问题,我非常感谢,但请解释你的所作所为。而且,请不要完全重写代码,就像重写整个程序以使其工作一样;我正在寻找解决方案/解释,而不是有人写完整个事情。如果它完全错误并且需要完全重写,请简单地用语言解释应该做什么。

仍然,非常感谢你,我感谢任何帮助。

(P.S。我知道只有用于密码生成的小写字母的安全性较弱,但这仅用于实验)

1 个答案:

答案 0 :(得分:3)

问题是你没有重新生成随机元素,你在randomLetter中缓存一次的随机元素,所以它总是一样的。每次引用时,变量的值都不会改变。将它放在for循环中以每次迭代重新生成数字:

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
function generate () {
  for (i = 0; i < 10; i++) {
    var randomLetter = arr[Math.floor(arr.length * Math.random())];
    document.write(randomLetter); 
  } 
}