循环(存储集合中的项目)似乎迭代的次数应该少于它应该的次数?

Pry*_*cer 2 javascript for-loop

我想在本地存储中添加60件东西.在for循环中,我正在创建一个对象,将其转换为字符串并将其添加到localstorage,并将时间作为键.

function populate()
{
    for(var i=0; i < 60; i++)
    {
        var newDate = new Date();
        var card = {
            'name': i,
            'cost': i,
            'type': i,
            'text': i,
            'power': i,
            'toughness': i};    
        localStorage.setItem(newDate.getTime(), JSON.stringify(card));
    }
}
Run Code Online (Sandbox Code Playgroud)

逻辑规定这应该发生60次.在实践中,它发生在大约2到20次之间,并且给予对象属性的i的值变化很大.有时我得到2的值为11和59,有时我得到18,数字从1到59或60.这个for循环不会迭代多少次,但它甚至没有按顺序执行,它似乎是随机的.

这里发生了什么?

Tra*_*s J 10

您遇到了重叠时间的问题,因此未插入重复项.这将分离重复项.您可以选择不同的实现或GUID,这取决于您自行决定.

function populate()
{
for(var i=0; i < 60; i++)
{
    var newDate = new Date();
    var card = {
        'name': i,
        'cost': i,
        'type': i,
        'text': i,
        'power': i,
        'toughness': i};    
    localStorage.setItem("" + i + newDate.getTime(), JSON.stringify(card));
}
}
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清,这意味着循环的多次迭代可以在相同的毫秒内发生,因此`newDate.getTime()`在预期不同的时候具有相同的值,因此一些"卡"值被后来的值覆盖. (4认同)