如标题。我尝试了以下 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/