改进字符串的随机字符输出
Improve random character output from string
我有一个简单的 for 循环,它接受一串字符并吐出 4 个随机字符,我用它来创建游戏 ID,用于将多个用户同步在一起。我觉得我的方法不是 "random enough" 并且在某些情况下即使字符刺痛那么大也会产生重复的结果。无需存储创建的游戏 ID 以进行比较以查看它们是否存在,但是,我想找出一种方法来更好地从字符串中随机选择字符。
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 4; i++ )
{
gameId += characters.charAt(Math.floor(Math.random() * characters.length));
}
编辑:也许在 for 循环之前改组字符串可能是一种方法?
我通常会选择这样的东西:
let length = 4,
random = (Math.random() * Number.MAX_VALUE).toString(36).substr(0,length);
一个简单的选择:
function generateRandomID() {
return Math.random().toString(36).slice(-4);
};
Obs:只有数字和小写字符
我认为您的解决方案与您将获得的一样随机,并且打乱字符串不会成功 "more random"。但是 this 可能是一种更简单的方法。
我认为你的方法会很好用。我唯一的问题是你为什么选择只使用 4 个字符?您可能需要更长的 ID。
我有一个简单的 for 循环,它接受一串字符并吐出 4 个随机字符,我用它来创建游戏 ID,用于将多个用户同步在一起。我觉得我的方法不是 "random enough" 并且在某些情况下即使字符刺痛那么大也会产生重复的结果。无需存储创建的游戏 ID 以进行比较以查看它们是否存在,但是,我想找出一种方法来更好地从字符串中随机选择字符。
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 4; i++ )
{
gameId += characters.charAt(Math.floor(Math.random() * characters.length));
}
编辑:也许在 for 循环之前改组字符串可能是一种方法?
我通常会选择这样的东西:
let length = 4,
random = (Math.random() * Number.MAX_VALUE).toString(36).substr(0,length);
一个简单的选择:
function generateRandomID() {
return Math.random().toString(36).slice(-4);
};
Obs:只有数字和小写字符
我认为您的解决方案与您将获得的一样随机,并且打乱字符串不会成功 "more random"。但是 this 可能是一种更简单的方法。
我认为你的方法会很好用。我唯一的问题是你为什么选择只使用 4 个字符?您可能需要更长的 ID。