改进字符串的随机字符输出

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。