欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript 生成唯一ID的幾種方式

 更新時(shí)間:2021年02月19日 09:13:47   作者:specialCoder  
這篇文章主要介紹了JavaScript 生成唯一ID的幾種方式,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下

可行方案

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)題詳析

    關(guān)于微信小程序自定義tabbar問(wèn)題詳析

    微信小程序是一種全新的連接用戶與服務(wù)的方式,它可以在微信內(nèi)被便捷地獲取和傳播,同時(shí)具有出色的使用體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序自定義tabbar問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Javascript學(xué)習(xí)筆記 delete運(yùn)算符

    Javascript學(xué)習(xí)筆記 delete運(yùn)算符

    關(guān)于javascript的delete運(yùn)算符,MDN里有相關(guān)文檔。以下是我的學(xué)習(xí)筆記,更多是要關(guān)注特殊情況的使用和注意點(diǎn)。
    2011-09-09
  • 使用JS 清空File控件的路徑值

    使用JS 清空File控件的路徑值

    今天Test時(shí)發(fā)現(xiàn)一個(gè)小問(wèn)題,上傳控件完成后,路徑還保留,為了清除,需要想一些辦法
    2013-07-07
  • Ajax,UTF-8還是GB2312 eval 還是execScript

    Ajax,UTF-8還是GB2312 eval 還是execScript

    討厭的東西。 關(guān)于Ajax獲取HTML內(nèi)容編碼,與JavaScript載入腳本的動(dòng)態(tài)執(zhí)行問(wèn)題。
    2008-11-11
  • es6學(xué)習(xí)筆記之Async函數(shù)基本教程

    es6學(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-05
  • js、css、img等瀏覽器緩存問(wèn)題的2種解決方案

    js、css、img等瀏覽器緩存問(wèn)題的2種解決方案

    瀏覽器緩存的意義在于提高了執(zhí)行效率,但是也隨之而來(lái)帶來(lái)了一些問(wèn)題,導(dǎo)致服務(wù)端修改了js、css,客戶端不能更新,下面有幾個(gè)不錯(cuò)的方法可以解決此問(wèn)題,感興趣的朋友可以參考下
    2013-10-10
  • js取值中form.all和不加all的區(qū)別介紹

    js取值中form.all和不加all的區(qū)別介紹

    在js里取值,可以用form.xx.value,也可以用form.all.xx.value,那么js取值中form.all和不加all有什么區(qū)別呢?下面就為大家詳細(xì)介紹下
    2014-01-01
  • d3.js 地鐵軌道交通項(xiàng)目實(shí)戰(zhàn)

    d3.js 地鐵軌道交通項(xiàng)目實(shí)戰(zhàn)

    這篇文章主要介紹了d3.js 地鐵軌道交通項(xiàng)目實(shí)戰(zhàn),本文通過(guò)實(shí)例代碼項(xiàng)目截圖給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • JavaScript深拷貝的一些踩坑記錄

    JavaScript深拷貝的一些踩坑記錄

    這篇文章主要給大家介紹了關(guān)于JavaScript深拷貝的一些踩坑記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • js隱式全局變量造成的bug示例代碼

    js隱式全局變量造成的bug示例代碼

    一段js代碼遇到一個(gè)bug,由于中間的隱式全局變量造成的,通過(guò)谷歌瀏覽器的js調(diào)試器才找到問(wèn)題所在,下面將代碼與大家分享下
    2014-04-04

最新評(píng)論