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

标签 javascript arrays function random

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

程序:我有一个带有按钮的网站。当您单击该按钮时,系统会生成一个密码(从数组)并向用户显示。

问题:“functiongenerate()”显示单个相同的生成字符 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.我知道仅使用小写字母生成密码安全性会较弱,但这仅用于实验)

最佳答案

问题是您没有重新生成随机元素,而是在 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); 
  } 
}

关于JavaScript 密码生成器 - 数组中的多个随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44114924/

相关文章:

javascript - jstree 插件和 stopPropagation 问题

python - 测试数组是否是数组数组的一部分并将其删除

swift - 要求其他函数调用一个函数,但谁提供了参数值?

c - 在 CUDA C 中使用简单的设备功能获取 "multiple definition"错误

java - 整数不像真正的对象?

javascript - 解决 $rootScope :infdig Infinite $digest Loop

javascript - List.js - 按日期排序问题

javascript - 如何设置 "var count"以便它第一次初始化然后递增?

php - 基于另一个数组保留二维数组的每一行中的元素

arrays - Swift 4 - 如何从数组中返回重复值的计数?