【问题标题】:Create a unique number with javascript time使用 javascript 时间创建一个唯一的数字
【发布时间】:2011-12-22 03:46:58
【问题描述】:

我需要使用 javascript 即时生成唯一的 ID 号。过去,我通过使用时间创建一个数字来做到这一点。该数字将由四位数字的年份、两位数字的月份、两位数字的日期、两位数字的小时、两位数字的分钟、两位数字的秒和三位数字的毫秒组成。所以它看起来像这样:20111104103912732 ...这将为我的目的提供足够的确定性。

我已经有一段时间没有这样做了,我没有代码了。任何人都有执行此操作的代码,或者对生成唯一 ID 有更好的建议?

【问题讨论】:

标签: javascript time numbers unique


【解决方案1】:

我找到的简单解决方案

var today = new Date().valueOf();

console.log(今天);

【讨论】:

    【解决方案2】:

    即使在快速循环中,这也会返回唯一值。

    当然这还可以改进很多

    const getUniqueValue = (strength = 2, int=false) => {
        
        const u = () => (Math.random() * 10000).toString().replace('.','');
        
        let r = '';
        
        for (let i=0; i < strength; i++) {
            r += u();
        }
        
        return (int) ? parseInt(r) : r;
    }
    
    [1,2,3,5,6,7,8,9,10].map(item => console.log(getUniqueValue()));

    【讨论】:

      【解决方案3】:

      我生成唯一 ID 的常用方法是使用 Date.now();

      const ID = Date.now();
      console.log(ID);
      

      另一种方法是使用库作为 idgp,可以使用 npm 安装。

      链接:https://www.npmjs.com/package/idgp

      【讨论】:

        【解决方案4】:

        使用 javascript time V2.0 生成唯一编号

        JavaScript 时间值:日期为自 1970-01-01 以来的毫秒数
        100% 保证生成不同的数字...

        let Q = {};
        Q.in = document.querySelector('#in');
        Q.info = document.querySelector('#butStart');
        Q.copy = document.querySelector('#butCopy');
        Q.demo = document.querySelector('#demo');
        
        function genUniqueNum() {
            let kol = Q.in.value,
                data, tmp, out = '';
            let i = 0;
        
            while (i < kol) {
                data = new Date().getTime();
                if (data != tmp) {
                    out += `${data}\n`;
                    tmp = data;
                    i++;
                }
            }
            Q.demo.value += out;
        }
        
        function elemTarget(e) {
            e = e || window.event;
            e.preventDefault();
            return e.target;
        }
        
        document.addEventListener('click', (e) => {
            let elem = elemTarget(e);
        
            if (elem.id === 'butStart') {
                genUniqueNum();
            }
            if (elem.id === 'butCopy' && Q.demo.value) {
                Q.demo.select();
                Q.demo.setSelectionRange(0, 99999);
                document.execCommand("copy");
            }
            if (elem.id === 'butClear') {
                Q.demo.value = '';
            }
        });
        #in{
          width: 91px;
        }
        
        #butStart,
        #butCopy,
        #butClear {
          width: 100px;
          margin: 3px 2px 0px 0;
          height: 25px;
        }
        
        #butCopy {
          margin: 0 5px;
        }
        
        #demo {
          width: 200px;
          height: 100px;
          margin: 5px 0 0;
        }
          <input type="number" id="in" maxlength="1000000" minlength="1" value="5">
          <label> - Amount</label><br>
          <button id="butStart">Start</button><br>
          <textarea id="demo"></textarea><br>
          <button id="butClear">Clear</button><button id="butCopy">Copy</button>

        Fork-codepen.io

        【讨论】:

          【解决方案5】:

          只写使用自动增量

          i=1;
          getUnique(){
          return i++
          }
          

          【讨论】:

          • 但如果我在其他地方再次i=1,这将不再有效,对吧?
          猜你喜欢
          • 2012-08-29
          • 2011-03-14
          • 2018-08-14
          • 1970-01-01
          • 1970-01-01
          • 2022-08-04
          • 2011-05-14
          • 2012-04-22
          相关资源
          最近更新 更多