正在为循环创建唯一id

Creating unique id in for loop

本文关键字:唯一 id 创建 循环      更新时间:2023-09-26

我应该提到,这将进入数据库,因此它确实需要是唯一的。在进入数据库之前,我需要定义id

for (var i = 0; i < obj.length; i++) {
    var id = Date.now();
    console.log(id);
}

问题是,这是输出:

1428356251606
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
1428356251607
...

我曾想过使用Math.random(),但以所有挪威神的名义,它可能会两次击中同一个数字。

你知道如何在保持for循环速度的同时使其真正独特吗?

您应该使用i。保证i对于循环的每次迭代都是唯一的。

根据您希望ID的唯一性持续多久,您可以在ID中添加另一种唯一的化合物(Date.now()是一个很好的候选者,因为它保证在不同时间在同一台机器上的不同运行中是唯一的)。

怎么样

var id = Date.now();
for (var i = 0; i < obj.length; i++) {
    console.log(id+i);
}

您可以强制迭代,直到ID重复

var lastGenerated = 0;
var id = 0;
for (var i = 0; i < obj.length; i++) {
    do{
       id = Date.now();
    }while(lastGenerated == id);
    lastGenerated = id;
    console.log(id);
}

或者你可以像下面这样制作

var seed = Date.now() * 1000;
for (var i = 0; i < obj.length; i++) {
    var id = seed + i;
    console.log(id);
}

一个好的解决方案是创建一个对象来管理id。。。

(function(w){
   var __id = Date.now();
   function ID(){   }
   ID.prototype.next = function(){
       return ++__id;
   };
   w.ID = new ID();
}(window));


for(var i = 0; i < obj.length; i++){
    var id = ID.next();
    console.log(id);
}