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

Loop (which stores items in collection) seems to iterate less times that it should?

本文关键字:迭代 项目 存储 集合 循环      更新时间:2023-09-26

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

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 赋予对象属性的值变化很大。有时我得到值为 11 和 59 的 2,有时我得到 18,数字从 1 到 59 或 60。这个 for 循环没有迭代应有的次数,但它甚至没有按顺序迭代,它似乎是随机的。

这是怎么回事?

您遇到了重叠时间的问题,因此未插入重复项。这将分离重复项。你可以选择不同的实现或 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));
}
}

关于为什么会发生这种情况,请参阅特拉维斯的答案,但如何在不更改密钥的情况下解决它,因为我猜您可能希望在执行此操作时引用它:

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);
    }
}