首先我们,要封装这样一个函数,首先要确定,传入哪些参数。
就这一个参数就可以了,现在是这样!
function randomString(len=6){
}
数字转字符串,有两种方式!一种把所有随机字符,定义成为一个数组,例如
const arr = '1234567890qwertyuiopasdfghjklzxcvbnm'.split('')
第二步
function randomString(len=6){
const arr = '1234567890qwertyuiopasdfghjklzxcvbnm'.split('')
let text = ''
for(let i =0;i<len;i++){
const randomInt = parseInt(Math.random()*len)
if(randomInt>=arr.length){
text+=arr[arr.length-1]
continue;
}
text+=arr[randomInt]
}
return text
}
但是这种方式是最传统的,且代码冗长,不是我们想要的!
接下来就是压轴的,我们最新颖的方式,进制数转随机字符串!
首先我们知道,进制是缝进制顶上的数字就进一,二进制是缝二进一,比如2转成二进制就是11。通常我们使用的颜色进制码大家都知道,是16进制,就已经存在字符串了。其实传统十进制以上,就已经存在字符串了。
重点
那我们想要在随机字符串出现全的字母怎么办呢,我们知道英语字母一共26个,十进制以上才会有字母。那么我们把随机出来的数字转成
36进制即可,怎么做呢!
Math.random().toString(36)
看到没,就是如此简单,没想到吧!
然后这样出来可以吗,肯定不行,还是没想到吧!
这样出来的结果可能是'0.d3v9gd3wxr5'
这种的,前面还有0和小数点,那然后怎么去掉呢!你是不是也没猜到,其实也非常简单!
function randomString(len=6){
Math.random().toString(36).substring(2,len)
}
但是这种情况存在问题,有没有可能你随机出来的数字长度不满足你len
传入的数字,那怎么办呢?
你别慌,我有办法,可以在最后面补充0
function randomString(len=6){
Math.random().toString(36).substring(2,len).padEnd(len,'0')
}
但是如果len
太长,你全补充0是不是不太好,太不自然了,那有没有办法呢?你是不是拿它没办法了!
别慌,我有办法!经过测试,Math.random().toString(36).length
最低的长度基本是11位,那么我们可以判断11位如果都不到就补0,如果超了11位,就递归调用自己,直到满足len
即可!
function randomString(len=6){
if(len<=11){
return Math.random()
.toString(36)
.substring(2,2+len)
.padEnd(len,'0')
}
return randomString(11)+randomString(len-11)
}
恭喜你,这样就做到最完美了!