在同一个字符串中运行随机字符

时间:2018-04-23 16:47:24

标签: javascript callback

作为标题。我尝试了以下javascript。

这将是console.log()相同的随机数20次,但我怎么去约20个随机字符?我们使用回调函数吗?

var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var insert = letters.charAt(Math.floor(Math.random() * letters.length));

var str = "0";

for (i = 0; i < 20; i++) {

  setTimeout(function() {
    var newStr = str.replace(/./, insert);
    console.log(newStr)
  }, 50 * i)

}

1 个答案:

答案 0 :(得分:3)

这一行:

var insert = letters.charAt( Math.floor(Math.random()*letters.length) );

只运行一次。每次询问insert的值时,它都不会重新运行随机部分。

您可以在每个循环中手动重新运行它:

&#13;
&#13;
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var str = "0";
for(i=0; i<20; i++) {

    setTimeout(function(){
      var insert = letters.charAt( Math.floor(Math.random()*letters.length) );
      var newStr = str.replace(/./, insert);
      console.log(newStr)
    }, 50*i)

}
&#13;
&#13;
&#13;

但请记住,您可能不止一次获得相同的角色,因为根据定义它是(伪)随机的 - 因此可以选择与之前选择的相同的角色。

每次您必须从列表中删除已挑选的字符时,确保您获得不同的随机字符。将字符转换为数组并使用splice将其删除后,可以更轻松地将其删除:

&#13;
&#13;
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");
var str = "0";
for(i=0; i<20; i++) {

    setTimeout(function(){
      var insert = Math.floor(Math.random()*letters.length);
      var newStr = str.replace(/./, letters[insert]);
      console.log(newStr)
      letters.splice(insert,1);
    }, 50*i)

}
&#13;
&#13;
&#13;