生成随机数,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,还是生成其他地方的随机数,都足够用了😄

相关推荐
幽络源小助理2 小时前
苹果CMS V10 MXPro V4.5模版下载, 自适应视频主题源码, 幽络源源码
前端·开源·源码·php源码
kyriewen2 小时前
坏了,黑客学会用AI写外挂了
前端·程序员·ai编程
xiangxiongfly9153 小时前
Vue3 根据角色权限动态加载路由
前端·javascript·vue.js·动态加载路由
达达尼昂3 小时前
Claude 多 Agent 系统:从零搭建一个 4 Agent 团队
前端·架构·ai编程
容智信息4 小时前
AI Agent(智能体)的输出格式应该从 Markdown 转向 HTML吗?
前端·人工智能·rust·编辑器·html·prompt
_风满楼4 小时前
TDD 进阶:换个角度看会议室预约
前端·javascript·github
Amy_yang4 小时前
uni-app 安卓端纯前端预览 DOCX 的实现思路
前端·vue.js
x_y_4 小时前
分享一个自己总结的前端开发skill~ requirement-to-delivery
前端·ai编程
梨子同志4 小时前
CSS Grid
前端·css
子兮曰4 小时前
SuperSplat 深度解析:7.6K Stars 的浏览器端 3D 高斯泼溅编辑器 — 在 Web 上编辑现实
前端·javascript·webgl