生成随机数,Math.random的使用

有时候我们有生成随机数的一些想法,可能会直接想使用 Math.random,但这个Math.random 优缺也很明显,优点简单方便兼容性高,缺点就是算法固定,后续可能会预测,且全是数字,长度也不固定,对于一些场景不太友好

我们可以通过使用码表 + 随机数偏移的方式生成随机数,这样效率实际也不低,且不仅仅是纯数字了,长度也固定了,并且码表也是可以随机变动的,这样上面的一些隐患实际就没了

js 复制代码
//码表可以扩展加乱序,可打乱减少被预测概率,这里就不写码表打乱的算法了,我们就解决数字 + 长度问题,看起来舒服
const mapString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

//生成随机数,根据随机数生成偏移,取出码表中的一个字符,根据长度取出指定个数
function getRandomString(length) {
  let result = "";
  const charactersLength = mapString.length;
  for (let i = 0; i < length; i++) {
    //当然想进一步提速,也可以转化为数组的访问,这里不多做操作了
    result += mapString[Math.floor(Math.random() * charactersLength)];
  }
  return result;
}

如果对于码表没有要求的话仅仅是当一个唯一id的话,我们实际上直接将随机数转化成36进制字符串,取出其中一项就行了,实际上转化成36进制,取出其中一项,就是 0-9a-z+ 了,但感觉没上面好

js 复制代码
function getRandomString(length) {
  let result = '';
    for (let i = 0; i < length; i++) {
        result += Math.random().toString(36).charAt(2);
    }
    return result;
}

看了上面的写法,是不是感觉思路更多了,确实如此,我们实际使用的话,就使用第一种方案感觉就挺好的,不管是生成表单的id,还是生成其他地方的随机数,都足够用了😄

相关推荐
李伟_Li慢慢几秒前
13-mini版WebGLProgram
前端·three.js
李伟_Li慢慢2 分钟前
14-mini版WebGLPrograms
前端·three.js
李伟_Li慢慢7 分钟前
19-mini版WebGLRenderer
前端·three.js
李伟_Li慢慢26 分钟前
10-mini版bindingStates
前端·three.js
李伟_Li慢慢28 分钟前
08-BufferAttribute
前端·three.js
李伟_Li慢慢29 分钟前
09-mini版WebGLAttributes
前端·three.js
李伟_Li慢慢29 分钟前
11-mini版WebGLGeometries
前端·three.js
李伟_Li慢慢31 分钟前
18-mini版WebGLRenderList
前端·three.js
李伟_Li慢慢32 分钟前
15-mini版WebGLMaterials
前端·three.js
ji_shuke39 分钟前
Vue3 前端批量打印 PDF/图片踩坑记:跨域、合并打印、对话框闪退与按钮一直 loading
前端·pdf·状态模式·pdf打印