2

我想在本地存储中添加 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));
    }
}

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

这里发生了什么?

4

2 回答 2

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));
}
}
于 2012-04-12T21:45:50.237 回答
0

关于它发生的原因,请参阅 Traviss 的回答,但如何在不更改密钥的情况下解决它,因为我猜您可能希望在可以执行此操作时参考它:

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};    
        setTimeout(function(){localStorage.setItem(newDate.getTime(), JSON.stringify(card));},1);
    }

}
于 2012-04-12T21:49:02.380 回答