Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改数组对象属性,然后保存回本地存储?_Javascript_Jquery_Local Storage - Fatal编程技术网

Javascript 更改数组对象属性,然后保存回本地存储?

Javascript 更改数组对象属性,然后保存回本地存储?,javascript,jquery,local-storage,Javascript,Jquery,Local Storage,我正在做一个购物车,如果项目id存在于localStorage中,我想增加数量 <button data-item_id="1" data-item_name="cake" data-item_price="2 dollar">Add to cart</button> 调试几个小时无法解决。使用{}而不是[]使arr每个项目id包含一个对象,并且每次调用每个对象时,都会在数量中添加1。此代码中没有删除 $(function(){ $('button').on("

我正在做一个购物车,如果项目id存在于localStorage中,我想增加数量

<button data-item_id="1" data-item_name="cake" data-item_price="2 dollar">Add to cart</button>

调试几个小时无法解决。

使用{}而不是[]使
arr
每个项目id包含一个对象,并且每次调用每个对象时,都会在数量中添加1。此代码中没有删除

$(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));

    });

});

您是指
$。每个(arr,函数(i){…
就像adeneo说的那样:你忘记了。每一个,但即使这样,它也不会做你想让它做的事。页面上有一个产品还是有更多?@OSDM当然有多个产品。重复你自己之前的问题,//在你的文章中,你也提到了这个,所以这似乎也是密切相关的。请用一个问题来讨论你的问题问题,不要将其分散到多个问题上。@CBroe,因为直到现在还没有人能回答。您在哪里声明obj?我只是发现这不起作用,因为我必须使用[],它不仅仅是一个项目,而是多个项目。@ChintanSoni这很有效,但是多个项目如何?使用一个对象?检测更改的目的是什么?这有点可笑。代码中的问题是,您总是将对象添加到数组中,所以即使您只需要增加数量,您仍然在添加项目。这就是我添加检测的原因更改,也就是说,如果只更改数量,它将不会将对象添加到数组中。这听起来可能很有趣,但很有效。当ID可能是唯一的,因此可以用作arr对象中的键时,循环所有项目的效率非常低。这是我的第一个建议,当该人在另一个问题中询问此问题时,但这不是什么他们不想要。
$(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));

    });

});