在for循环中创建唯一id

时间:2015-04-06 21:41:41

标签: javascript

我应该提到这将进入一个数据库,因此它确实需要是唯一的。我需要在进入数据库之前定义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循环速度的同时让它真正独一无二?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

怎么样

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

答案 2 :(得分:-1)

您可以强制迭代直到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);

}