循环(将项目存储在集合中)似乎迭代的次数比它应该的次数少
Loop (which stores items in collection) seems to iterate less times that it should?
我想向本地存储添加 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);
}
}
相关文章:
- 如何通过迭代对象数组来删除某些项目
- 为什么我的jQuery .每次迭代都无法使用每个项目的属性
- 使用节点在 JSON 数组中搜索项目(最好不迭代)
- "搜索并销毁“;迭代不会'不要一次删除所有项目
- AngularJS Ng-Repeat不迭代$Scope中的项目
- 如何在角度UI树中获取某个项目的键值或迭代
- 如何使用 Javascript 将迭代器索引号附加到数组中的每个项目
- 在 6 次迭代的步长中每三个项目更改一次
- AngularJs:错误:用于配对项目的自定义筛选器引发错误:“达到 10 次 $digest() 迭代.流产!
- 循环(将项目存储在集合中)似乎迭代的次数比它应该的次数少
- 在 Angular 项目中迭代 JSON 响应以创建新的 $scope obj 我可以在应用程序中使用的
- 动态确定项目的迭代-Rally SDK 1.33
- 最快的方式通过数组多次迭代,同时删除项目
- JavaScript:使用一个对象在数组上迭代并跟踪项目频率
- 如何迭代项目I'我用jquery选择了
- Angular ng重复每次迭代多个项目
- 画布游戏-存储/计算位置/迭代粒子/项目符号/游戏元素的最有效方法
- 在AngularFire中迭代项目列表时,如何获取每个项目的ID
- 单击一起处理迭代中的所有项目 - AngularJS
- 从数组中删除项目而不迭代