我想为for循环中的每个项生成一个时间戳,但我在循环中只得到一个时间戳。如何在javascript中为for循环中的每个项创建新的时间戳。
for (var i = 0 ; i < 5; i++ ) { vm.workers[i].id = (new Date()).getTime(); }
这个只提供一个时间戳,而不是5个不同的时间戳,任何人都可以告诉我如何在循环内生成多个时间戳。
答案 0 :(得分:4)
所有ID都是相同的,因为循环根本没有时间运行。那么如何为每个产生一个唯一的数字呢?每次使用时添加一个。
var ts = (new Date()).getTime();
for (var i = 0 ; i < 5; i++ ) {
vm.workers[i].id = ts++
}
答案 1 :(得分:2)
回答有这个循环的原始问题:
for (var i = 0 ; i < 5; i++ ) { new Date().getTime(); }
你没有对它们做任何事情,所以如果你不使用控制台,它只会打印最后一个或根本不打印。
尝试使用console.log记录每一个。
for (var i = 0 ; i < 5; i++ ) { console.log(new Date().getTime()); }
将它们分配给一个数组并像这样添加它们,这样就会给你一个日期/时间stanmps数组:
var list = [];
for (var i = 0 ; i < 5; i++ ) { list.push(new Date().getTime()); }
console.log(list);
答案 2 :(得分:0)
一个简单的循环迭代当然可以用不到一毫秒的时间来完成,因此你得到的是相同的时间戳。
找到一种更可靠的方法来创建ID,例如GUID。
这是一个函数,取自创建GUID的this S.O answer:
function guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
console.log(guid())