Javascript在for循环中只返回一个时间戳

时间:2017-12-04 14:00:21

标签: javascript angularjs for-loop time

我想为for循环中的每个项生成一个时间戳,但我在循环中只得到一个时间戳。如何在javascript中为for循环中的每个项创建新的时间戳。

for (var i = 0 ; i < 5; i++ ) { vm.workers[i].id = (new Date()).getTime(); }

这个只提供一个时间戳,而不是5个不同的时间戳,任何人都可以告诉我如何在循环内生成多个时间戳。

3 个答案:

答案 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())