JavaScript で一意の ID を生成するいくつかの方法

JavaScript で一意の ID を生成するいくつかの方法

考えられる解決策

1. Math.randomは[0,1)の範囲の乱数を生成します。

//今回は生成された値を実行しました: 0.5834165740043102 
Math.random();

2. 現在のタイムスタンプを取得する Date.now

//タイムスタンプは1482645606622です
日付.now();

3. 小数を他の基本文字列に変換する Number.toString

// 1482645606622 を 2 進数に変換: 10101100100110100100001001000011011110 
(1482645606622).toString(2);

//16進数に変換: 159349090de MongoDB の ObjectID は 24 桁の 16 進数です (1482645606622)。toString(16);

//サポートされる最大基数は 0-9a-z の文字を使用した 16 進数です: ix48wvry 
(1482645606622).toString(36);

改良版1: 乱数 + toString()

1. 乱数バージョン

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(){
 Math.random().toString() を返す
}

//0.1283460319177394 に似た ID を生成します
重複IDを生成()

2. 乱数バージョン 16進数バージョン

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(){
 Math.random().toString(16) を返す
}

//関数は0.c1615913fa915のようなIDを生成します
重複IDを生成()

3. 乱数バージョン 16進数バージョン

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(){
 Math.random().toString(36) を返す
}

//関数は0.hefy7uw6ddzwidkwcmxkzkt9のようなIDを生成します
重複IDを生成()

4. 乱数バージョン 16進数バージョン

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(){
 Math.random().toString(36).substr(2) を返す
}

//この関数は8dlv9vabygks2cbg1spds4iのようなIDを生成します
重複IDを生成()

要約する

利点: toStringの基数変換を使用すると、より短い文字列でより広い範囲を表すことができます。

デメリット: 乱数を ID として使用すると、使用回数が増えるにつれて必然的に同じ ID が 2 つ生成されます。

改良版2

1. タイムスタンプ+16進数バージョンを導入する

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(){
 idStr = Date.now().toString(36) とします。
 idStr += Math.random().toString(36).substr(2)
 idStrを返す
}

//関数はix49sfsnt7514k5wpflyb5l2vtok9y66rのようなIDを生成します
重複IDを生成()

2. タイムスタンプ + 16進数バージョン + 乱数の長さ制御を導入する

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(ランダム長さ){
 idStr = Date.now().toString(36) とします。
 idStr += Math.random().toString(36).substr(2,randomLength)
 idStrを返す
}

// GenNonDuplicateID(3)はix49wl2978wに似たIDを生成する
重複IDなし(3)

ただし、この方法で生成された ID の最初の数桁は常に同じになります。

3. タイムスタンプを導入 + 乱数の先頭に16進数を追加 + 乱数の長さを制御する

/**
 * 一意のIDを生成する
 */
関数 GenNonDuplicateID(ランダム長さ){
 Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36) を返します。
}
//GenNonDuplicateID() は rfmipbs8ag0kgkcogc に似た ID を生成します。
重複IDを生成()

要約する

タイムスタンプを使用するだけで、複数の人が同時に同じデータにアクセスできるようになります。乱数を追加することで一意性を実現できます。さらに、長さをカスタマイズできるため、UUID はより柔軟になります。

要約する

ユニバーサルソリューション:

/**
 * 一意のIDを生成する
 * @param { 数値 } ランダム長さ 
 */
関数 getUuiD(ランダム長さ){
 Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36) を返します。
}

上記は、JavaScript でユニーク ID を生成するいくつかの方法の詳細です。JavaScript でユニーク ID を生成する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • グローバルに一意な識別子 (GUID、UUID) を生成する Javascript メソッド
  • extjsの各コンポーネントには一意のIDが必要です。そうでない場合はエラーが発生します。

<<:  Linux 占有ポートの強制解放と Linux ファイアウォールのポート開放方法の詳しい説明

>>:  MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ

推薦する

MySQL タイムスタンプ比較クエリで遭遇する落とし穴と解決策

目次タイムスタンプ比較クエリで遭遇する落とし穴タイムスタンプクエリ範囲の問題タイムスタンプ比較クエリ...

React でのポータルとエラー境界処理の実装

目次ポータルエラー境界処理エラー境界を使用しない場合はどうなりますか?注記ポータルスロットとも言えま...

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

Vue マルチページ構成の詳細

目次1. 複数ページの違い2. SPAとMPA 3. Vue Cli スキャフォールディング構成1....

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...

CentOS7 構成 Alibaba Cloud yum ソースメソッドコード

Centos yumフォルダを開くコマンドcd /etc/yum.repos.d/を入力します。 w...

Vue3 トランジションアニメーションの落とし穴記録について

目次背景問題の場所さらなる分析要約する背景私のコース「Vue 3 エンタープライズレベルの音楽アプリ...

Vue の get リクエストと post リクエストの違いのまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

フロントエンドの HTML 知識ポイントのまとめ (推奨)

1. HTMLの概要htyper テキスト マークアップ言語 ハイパーテキスト マークアップ言語ハ...

CSS -webkit-box-orient: コンパイル後に垂直プロパティが失われる

1. 原因要件は 2 行を表示することであり、余分なテキストは 3 つのドットに置き換えられるため、...

Linux で SVN サーバーをインストールする方法

1. Yumのインストール yum でサブバージョンをインストール 2. 構成1. 倉庫を作る/ho...

MySQL 8.0 における MySQL のインストールと新しいパスワード認証方法の詳細な説明

1. はじめにOracle が MySQL 8.0GA をリリースしました。海外での GA はリリー...

MySQL パラメータ関連の概念とクエリ変更方法

序文:以前の記事では、特定のパラメータの機能についてよく紹介してきました。しかし、MySQL パラメ...

MySQL 接続で認証失敗エラーが発生する場合の分析と解決方法

[問題の説明]アプリケーション側では、次のエラーが時々表示されます。メソッド 'mysql_...