这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文介绍了 js 生成一个不重复的 ID 的函数的进化之路,具有一定的参考价值,需要的朋友一起来看下吧
我今天要做的就是做一个不重复 ID 的生成器
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID():String{
- }
先看看下面的几个方法
1. 生成 [0,1) 的随机数的 Math.random, 例如
- //我这次运行生成的是:0.5834165740043102
- Math.random()
2. 获取当前时间戳 Date.now
- //现在时间戳是1482645606622
- Date.now()
3. 将 10 进制转换为其他进制的字符串 Number.toString
- //将1482645606622转换成二进制:10101100100110100100100001001000011011110
- (1482645606622).toString(2)
- //转换成16进制:159349090de MongDB中的ObjectID就是24位16进制数
- (1482645606622).toString(16);
- //最大进制支持转为36进制,使用字符是0-9a-z :ix48wvry
- (1482645606622).toString(36)
GenNonDuplicateID 的自我进化
1. 随机数版本 v0.0.1
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(){
- return Math.random().toString()
- }
- //生成一个类似 0.1283460319177394的ID
- GenNonDuplicateID()
2. 随机数版本 16 进制版本 v0.0.2
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(){
- return Math.random().toString(16)
- }
- //函数将生成类似 0.c1615913fa915 的ID
- GenNonDuplicateID()
3. 随机数版本 36 进制版本 v0.0.3
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(){
- return Math.random().toString(36)
- }
- //函数将生成类似 0.hefy7uw6ddzwidkwcmxkzkt9 的ID
- GenNonDuplicateID()
4. 随机数版本 36 进制版本 去掉 "0." v0.0.4
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(){
- return Math.random().toString(36).substr(3)
- }
- //函数将生成类似 8dlv9vabygks2cbg1spds4i 的ID
- GenNonDuplicateID()
然而用一个随机数作为 ID,随着使用次数的累积,必然会出现相同的两个 ID
5. 引入时间戳 的 36 微进制版本 v0.1.1
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(){
- let idStr = Date.now().toString(36)
- idStr += Math.random().toString(36).substr(3)
- return idStr
- }
- //函数将生成类似 ix49sfsnt7514k5wpflyb5l2vtok9y66r 的ID
- GenNonDuplicateID()
6. 引入时间戳 的 36 微进制版本 加入随机数长度控制 v0.1.2
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(randomLength){
- let idStr = Date.now().toString(36)
- idStr += Math.random().toString(36).substr(3,randomLength)
- return idStr
- }
- // GenNonDuplicateID(3) 将生成类似 ix49wl2978w 的ID
- GenNonDuplicateID(3)
这样生成的 ID 前面几位总是相同,看着不爽,于是再改改
7. 引入时间戳 随机数前置 36 进制 加入随机数长度控制 v0.1.3
- /**
- * 生成一个用不重复的ID
- */
- function GenNonDuplicateID(randomLength){
- return Number(Math.random().toString().substr(3,randomLength) + Date.now()).toString(36)
- }
- //GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的ID
- GenNonDuplicateID()
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持 phperz!
来源: http://www.phperz.com/article/17/0520/329184.html