JavaScript 生成唯一ID的幾種方式
可行方案
1.生成[0,1)的隨機(jī)數(shù)的Math.random
//我這次運(yùn)行生成的是:0.5834165740043102 Math.random();
2.獲取當(dāng)前時(shí)間戳Date.now
//現(xiàn)在時(shí)間戳是1482645606622 Date.now();
3.將10進(jìn)制轉(zhuǎn)換為其他進(jìn)制的字符串 Number.toString
//將1482645606622轉(zhuǎn)換成二進(jìn)制:10101100100110100100100001001000011011110 (1482645606622).toString(2); //轉(zhuǎn)換成16進(jìn)制:159349090de MongDB中的ObjectID就是24位16進(jìn)制數(shù) (1482645606622).toString(16); //最大進(jìn)制支持轉(zhuǎn)為36進(jìn)制,使用字符是0-9a-z :ix48wvry (1482645606622).toString(36);
改進(jìn)版本一:隨機(jī)數(shù) + toString()
1.隨機(jī)數(shù)版本
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(){ return Math.random().toString() } //生成一個(gè)類(lèi)似 0.1283460319177394的ID GenNonDuplicateID()
2.隨機(jī)數(shù)版本16進(jìn)制版本
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(){ return Math.random().toString(16) } //函數(shù)將生成類(lèi)似 0.c1615913fa915 的ID GenNonDuplicateID()
3.隨機(jī)數(shù)版本36進(jìn)制版本
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(){ return Math.random().toString(36) } //函數(shù)將生成類(lèi)似 0.hefy7uw6ddzwidkwcmxkzkt9 的ID GenNonDuplicateID()
4.隨機(jī)數(shù)版本36進(jìn)制版本
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(){ return Math.random().toString(36).substr(2) } //函數(shù)將生成類(lèi)似 8dlv9vabygks2cbg1spds4i 的ID GenNonDuplicateID()
總結(jié)
優(yōu)勢(shì):使用toString的進(jìn)制轉(zhuǎn)化可以實(shí)現(xiàn)更短的字符串表示更多的范圍
缺點(diǎn):用一個(gè)隨機(jī)數(shù)作為ID,隨著使用次數(shù)的累積,必然會(huì)出現(xiàn)相同的兩個(gè)ID
改進(jìn)版本二
1.引入時(shí)間戳 + 36進(jìn)制版本
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(){ let idStr = Date.now().toString(36) idStr += Math.random().toString(36).substr(2) return idStr } //函數(shù)將生成類(lèi)似 ix49sfsnt7514k5wpflyb5l2vtok9y66r 的ID GenNonDuplicateID()
2.引入時(shí)間戳 + 36進(jìn)制版本 + 隨機(jī)數(shù)長(zhǎng)度控制
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(randomLength){ let idStr = Date.now().toString(36) idStr += Math.random().toString(36).substr(2,randomLength) return idStr } // GenNonDuplicateID(3) 將生成類(lèi)似 ix49wl2978w 的ID GenNonDuplicateID(3)
但是,這樣生成的ID前面幾位總是相同。
3. 引入時(shí)間戳 + 隨機(jī)數(shù)前置 36進(jìn)制 + 隨機(jī)數(shù)長(zhǎng)度控制
/** * 生成一個(gè)用不重復(fù)的ID */ function GenNonDuplicateID(randomLength){ return Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36) } //GenNonDuplicateID()將生成 rfmipbs8ag0kgkcogc 類(lèi)似的ID GenNonDuplicateID()
總結(jié)
只使用時(shí)間戳,有個(gè)能在同一時(shí)間多人訪問(wèn)生成的是一樣的。加上隨機(jī)數(shù)可以實(shí)現(xiàn)唯一。再加上自定義長(zhǎng)度,使UUID更靈活。
總結(jié)
萬(wàn)能方案:
/** * 生成一個(gè)用不重復(fù)的ID * @param { Number } randomLength */ function getUuiD(randomLength){ return Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36) }
以上就是JavaScript 生成唯一ID的幾種方式的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 生成唯一ID的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于微信小程序自定義tabbar問(wèn)題詳析
微信小程序是一種全新的連接用戶與服務(wù)的方式,它可以在微信內(nèi)被便捷地獲取和傳播,同時(shí)具有出色的使用體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序自定義tabbar問(wèn)題的相關(guān)資料,需要的朋友可以參考下2022-04-04Javascript學(xué)習(xí)筆記 delete運(yùn)算符
關(guān)于javascript的delete運(yùn)算符,MDN里有相關(guān)文檔。以下是我的學(xué)習(xí)筆記,更多是要關(guān)注特殊情況的使用和注意點(diǎn)。2011-09-09Ajax,UTF-8還是GB2312 eval 還是execScript
討厭的東西。 關(guān)于Ajax獲取HTML內(nèi)容編碼,與JavaScript載入腳本的動(dòng)態(tài)執(zhí)行問(wèn)題。2008-11-11es6學(xué)習(xí)筆記之Async函數(shù)基本教程
這篇文章主要給大家介紹了關(guān)于es6中Async函數(shù)的基本教程,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)async函數(shù)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-05-05js、css、img等瀏覽器緩存問(wèn)題的2種解決方案
瀏覽器緩存的意義在于提高了執(zhí)行效率,但是也隨之而來(lái)帶來(lái)了一些問(wèn)題,導(dǎo)致服務(wù)端修改了js、css,客戶端不能更新,下面有幾個(gè)不錯(cuò)的方法可以解決此問(wèn)題,感興趣的朋友可以參考下2013-10-10d3.js 地鐵軌道交通項(xiàng)目實(shí)戰(zhàn)
這篇文章主要介紹了d3.js 地鐵軌道交通項(xiàng)目實(shí)戰(zhàn),本文通過(guò)實(shí)例代碼項(xiàng)目截圖給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11