如果item已存在,如何在localStorage中更新数组obj

时间:2017-02-16 21:42:39

标签: javascript jquery

想知道如果项目已经存在,如何更新localStorage中的数组obj,我的localStorage会在刷新后创建一个新数组,而不是更新或添加新对象。

localStorage obj -

cart - [{"Product":"Coke","Price":"1.99","Quantity":"1x "}]

我添加的addToCart函数我将对象推送到array[]

var itemStorage = [];
for (var key in drinkCounter) {
...

        var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' }
        itemStorage.push(cartObj);
        localStorage.setItem('cart', JSON.stringify(itemStorage));
...

    }

这是一个JSfiddle,所以一旦你添加一个项目并刷新页面并添加相同或新项目它会重新创建localStorage,我怎样才能更新它而不是每次你重新创建一个新项目刷新页面?

修改 如果您添加了相同的项目,则应更新{Quantity:}

按照下面的答案,我尝试更新现有项目的项目数量,但这不起作用。有什么建议吗?

cartItems.forEach(function (item, i) {
            if (item.Product == key) {
                item.Quantity = drinkCounter[key].count;
                // item.Quantity += 1; // or no avail
                index = i;
            }
        });

修正了localStorage数量

if (index !== -1) {
  cartItems[index].Quantity = parseInt(cartItems[index].Quantity) + 1 + 'x';
} else {
  var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' }
  cartItems.push(cartObj);
}

**编辑 - ** 有关总价的快速提问,有人可以指出为什么当我添加商品时,totalPrice为0时应该是商品价格

1 个答案:

答案 0 :(得分:2)

您无法避免对localStorage数据进行字符串化。

var data = JSON.parse( localStorage.getItem('cart') );
for (var key in drinkCounter) {
...       

    // search for a product with current key
    var index = -1;
    data.forEach(function(item, i){
        if( item.Product === key ) {
            index = i;
        }
    });

    if (index !== -1) {
        // data[index] = cartObj;
        data[index].Quantity = parseInt(data[index].Quantity.split(x)[0]) + drinkCounter[key].count + 'x ';
    } else {
        var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' };
        data.push(cartObj);
    }
...
}

localStorage.setItem('cart', JSON.stringify(data));