Javascript 会话存储更新项目计数

Javascript 会话存储更新项目计数,javascript,jquery,Javascript,Jquery,我试图使用会话存储创建一个简单的计数器,目的是在单击相应的添加项时显示项的增加。 我在检查项目是否在数组中以及是否不在数组中时遇到问题,请将其添加到数组中 我的问题在函数itemsUpdate()中 对不起,我不能很好地表达这个问题, 试试这个演示,你就会明白了 以下是演示: 问题在于itemsUpdate中的else块位于检查项目是否已在缓存中的循环内 因为您在整个缓存中循环,所以缓存中的每个项目都会触发else块,除了刚刚更新的项目 e、 g 你用ID=1来调用它。第一次调用时,缓存为空

我试图使用会话存储创建一个简单的计数器,目的是在单击相应的添加项时显示项的增加。 我在检查项目是否在数组中以及是否不在数组中时遇到问题,请将其添加到数组中

我的问题在函数itemsUpdate()中

对不起,我不能很好地表达这个问题, 试试这个演示,你就会明白了

以下是演示:


问题在于
itemsUpdate
中的else块位于检查项目是否已在缓存中的循环内

因为您在整个缓存中循环,所以缓存中的每个项目都会触发else块,除了刚刚更新的项目

e、 g

  • 你用ID=1来调用它。第一次调用时,缓存为空
  • 因此,您将执行一次推入缓存的操作
  • 缓存现在为[1]
  • 现在您使用ID=2进行调用
  • 循环两次,在第一次迭代中检查缓存[0]==2。它不是(它是1!),所以代码再次插入2
解决方案是在找到匹配项(并更新)后立即返回,只有在未找到任何匹配项时才执行添加到缓存中

请参阅更新的小提琴

返工的
itemsUpdate
功能现在是:

function itemsUpdate(items, item) {
   for (var i in items) {
     if (items[i].id === item.id) {
          items[i].value++;
         console.log("Updating " + item.id + " in cart...");
         return;
     }       
   }
    //item isn't in cart, so add it
        console.log("Adding " + item.id + " to cart for first time...");
        items.push(item);
}

是的,我已经消除了我的问题,我想是用休息代替返回。非常感谢你的帮助。但是我也建议删除
else
,这样代码就更清晰了。别忘了接受答案:)是的,我已经删除了else,现在我遇到了另一个问题,我正在使用load()方法显示的html部分的add项,并且项计数在主页上。当我点击add item时,什么也没有发生。我知道我的脚本在加载后不会再次运行,因此现在不需要在页面中添加新元素。我怎么才能通过这种情况呢?哎呀,我留下了一个函数,在调试过程中清除小提琴上的会话存储。删除此行
$(document.ready(function(){sessionStorage.clear();})应该是好的。对不起:)
function itemsUpdate(items, item) {
   for (var i in items) {
     if (items[i].id === item.id) {
          items[i].value++;
         console.log("Updating " + item.id + " in cart...");
         return;
     }       
   }
    //item isn't in cart, so add it
        console.log("Adding " + item.id + " to cart for first time...");
        items.push(item);
}