作为标题。我尝试了以下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)
}
答案 0 :(得分:3)
这一行:
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)
}
&#13;
但请记住,您可能不止一次获得相同的角色,因为根据定义它是(伪)随机的 - 因此可以选择与之前选择的相同的角色。
每次您必须从列表中删除已挑选的字符时,确保您获得不同的随机字符。将字符转换为数组并使用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)
}
&#13;