javascript - 在同一字符串中运行随机字符

标签 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)

}

最佳答案

这一行:

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

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

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

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)

}

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

为了确保每次您必须从列表中删除选定的字符时都会获得不同的随机字符。通过将字符转换为数组并使用 splice 在选择后将其删除,可以更轻松地做到这一点:

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)

}

关于javascript - 在同一字符串中运行随机字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49986134/

相关文章:

javascript - jQuery:完成动画不起作用后执行

PHP array_filter,如何在回调中获取key?

javascript - 如何使用 JQuery 在拖动事件中更改光标的图像侧

javascript - 什么时候应该执行回调

php - 如何使用参数和回调从 PHP 调用 JSON Web 服务?

javascript - 如何将现有的回调 API 转换为 Promise?

node.js - 以编程方式清除cloudflare缓存

javascript - 单击后如何动态更改css?然后再次单击返回默认值?

javascript - 如何在同一张 map 上使用带有多个标记的谷歌地图 API

javascript - 通过innerHTML 将脚本插入div 工作但未加载