alter array object属性然后保存回localStorage?

我正在做一个购物车,如果item_id在localStorage中出现,我想增加数量。

 

不知道为什么我的下面的代码不起作用,它添加了一个新对象而不是增加数量值。

  $(function(){ $('button').click(function(){ var item_id = $(this).attr('data-item_id'); var item_name = $(this).attr('data-item_name'); var item_price = $(this).attr('data-item_price'); var arr = JSON.parse(localStorage.getItem('cart')) || []; var obj = {}; if(arr.length === 0){ // first time insert obj.item_id = item_id; obj.item_name = item_name; obj.item_price = item_price; obj.item_qty = 1; }else{ $(arr,function(i){ //doesn't work here obj.item_qty[i] = parseInt(this.qty) + 1; }); } arr.push(obj); localStorage.setItem('cart',JSON.stringify(arr)); }); }); 

调试几个小时无法解决。

使用{}而不是[]使arr每个item_id包含一个对象,并且每次调用时每个对象都会将1添加到qty中。 此代码中没有删除

 $(function(){ $('button').on("click",function(e){ var item_id = $(this).data("item_id"); var item_name = $(this).data("item_name"); var item_price = $(this).data("item_price"); var cart = JSON.parse(localStorage.getItem('cart')) || {}; var currentObj = cart[item_id]; if(currentObj){ currentObj.qty++; // increase the qty by one } else { // item_id had not been stored before, create it cart[item_id]= { "item_name" :item_name, "item_price":item_price, "item_qty" :1 } } localStorage.setItem('cart',JSON.stringify(cart)); }); }); 

然后你必须这样做:

 $(function(){ $('button').click(function(){ var item_id = $(this).attr('data-item_id'); var item_name = $(this).attr('data-item_name'); var item_price = $(this).attr('data-item_price'); var arr = JSON.parse(localStorage.getItem('cart')) || []; var obj = {}; obj.item_id = item_id; obj.item_name = item_name; obj.item_price = item_price; obj.item_qty = 1; detectchange = 'no'; $.each(arr,function(i){ if(this.item_id == obj.item_id){ this.item_qty = parseInt(this.item_qty) + 1; detectchange = 'yes'; } }); if(detectchange =='no'){ arr.push(obj); } localStorage.setItem('cart',JSON.stringify(arr)); }); });