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