会话存储更新项目计数

时间:2015-02-22 01:08:56

标签: javascript jquery

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

我的问题出在函数itemsUpdate()

很抱歉,我无法很好地表达问题, 尝试演示,你就会理解

这是演示:http://jsfiddle.net/t77hqka6/2/

`function itemsUpdate(items, item) {
   for (var i in items) {
     if (items[i].id === item.id) {
         console.log(items);
        items[i].value++;
         console.log(items);
         break;
     }
       else{
        items.push(item);
       }
   }
    if(items.length === 0)
         items.push(item);
}`

1 个答案:

答案 0 :(得分:0)

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

因为您循环遍历整个缓存,所以除了刚刚更新的缓存之外,将始终为缓存中的每个项触发else块。

e.g

  • 您使用ID = 1调用它。第一次调用它时,缓存为空。
  • 因此,您执行推入缓存。
  • 缓存现在是[1]
  • 现在您拨打ID = 2
  • 你循环TWICE并在第一次迭代时检查Cache [0] === 2。它不是(它是1!),所以你的代码再次插入 2。

等等。解决方案是在找到匹配后立即返回(并更新),并且只有在没有找到任何内容的情况下执行才能添加到缓存中。

请参阅更新的小提琴here

现在重做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);
}