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

相关推荐
踩着两条虫8 分钟前
VTJ:技术架构概述
前端·架构·ai编程
吴声子夜歌18 分钟前
Vue3——过度和动画效果
前端·vue.js·es6
Via_Neo19 分钟前
字符串类型的相互转换
前端
zopple41 分钟前
前端三剑客 vs Vue.js:核心区别解析
前端·javascript·vue.js
hsjcjh42 分钟前
窗口函数-详细讲解分析
java·服务器·前端
CDN36042 分钟前
【踩坑实录】前端开发必看:一次由CSS缓存引发的线上事故与SEO反思
前端·css·缓存
胡志辉的博客1 小时前
本地明明好好的,怎么一上线就跨域了?把同源策略、前后端分工和 CORS 一次讲明白
前端·javascript·vue.js·reactjs·nextjs·跨域
|晴 天|1 小时前
文章系列管理系统:拖拽排序与进度追踪
前端·vue.js·typescript
GISer_Jing1 小时前
AI Agent接口终局:MCP有弊端,CLI凭什么成为主流?
前端·人工智能
jiayong231 小时前
第 17 课:任务选择与批量操作
开发语言·前端·javascript·vue.js·学习