Javascript 将多个条目保存到本地存储库中的同一帖子

Javascript 将多个条目保存到本地存储库中的同一帖子,javascript,local-storage,Javascript,Local Storage,我正在尝试将购物车保存到本地存储,但无法按我希望的方式保存它。对于每个添加的具有相同id的订单,金额应该增加,而不是创建输入的另一个副本。我已经准备好了这个半成品,但当我订购更多的商品时,它们就在第一个订单上。当我再次下第一份订单时,它会把自己放在后面,以一种奇怪的方式增加数量。感谢大家的帮助,因为我几天来一直在尝试解决这个问题,并且尝试了很多不同的东西,结果也不一样 从本地存储: 按下id为88的按钮4次: [{"id":"88","amount":4}] [{"id":"88","amou

我正在尝试将购物车保存到本地存储,但无法按我希望的方式保存它。对于每个添加的具有相同id的订单,金额应该增加,而不是创建输入的另一个副本。我已经准备好了这个半成品,但当我订购更多的商品时,它们就在第一个订单上。当我再次下第一份订单时,它会把自己放在后面,以一种奇怪的方式增加数量。感谢大家的帮助,因为我几天来一直在尝试解决这个问题,并且尝试了很多不同的东西,结果也不一样

从本地存储: 按下id为88的按钮4次:

[{"id":"88","amount":4}]
[{"id":"88","amount":4},{"id":"79","amount":5}
,{"id":"79","amount":4},{"id":"79","amount":3},{"id":"79","amount":2}]
按下id为79的按钮4次:

[{"id":"88","amount":4}]
[{"id":"88","amount":4},{"id":"79","amount":5}
,{"id":"79","amount":4},{"id":"79","amount":3},{"id":"79","amount":2}]
然后我再次按下id为88的按钮一次:

[{"id":"88","amount":5},{"id":"79","amount":5},{"id":"79","amount":4},
{"id":"79","amount":3},{"id":"79","amount":2},{"id":"88","amount":5},
{"id":"88","amount":5},{"id":"88","amount":5},{"id":"88","amount":5}]
下面是我的javascript:

$("#btnBuyMovie").on("click", function () {

    var movieId = getParameterByName("productId");

    var amount = 1;

if (localStorage.getItem("shoppingCart") !== null) {

        shoppingCartFromLS = JSON.parse(localStorage.getItem("shoppingCart"));
        var newShoppingCart = new ShoppingCart(movieId, amount);

        for (var i = 0; i < shoppingCartFromLS.length; i++) {

            if (movieId != shoppingCartFromLS[i].id) {

           shoppingCartFromLS.push(newShoppingCart);
localStorage.setItem("shoppingCart", JSON.stringify(shoppingCartFromLS));


            }
        }


        for (var i = 0; i < shoppingCartFromLS.length; i++) {

            if (movieId == shoppingCartFromLS[i].id) {

                shoppingCartFromLS[i].amount++;
            }
        }



        localStorage.setItem("shoppingCart", JSON.stringify(shoppingCartFromLS));


    } if (localStorage.getItem("shoppingCart") == null) {

        var shoppingCartFromLS = [];
        newShoppingCart = new ShoppingCart(movieId, amount);
        shoppingCartFromLS.push(newShoppingCart);
        localStorage.setItem("shoppingCart", JSON.stringify(shoppingCartFromLS));
    }
问题

以下for循环有多个问题

这条线看起来不对。 假设你的意思是这样的,它的末尾有一个分号,它将购物车推到推送功能的结果

假设上面这一行是您想要的,那么您正在检查是否每个项目都不是您正在寻找的相同项目。 因此,如果在任何迭代中都找不到该项,则再次添加该项

    for (var i = 0; i < shoppingCartFromLS.length; i++) {
        if (movieId != shoppingCartFromLS[i].shoppingCartFromLS.push(newShoppingCart);
            localStorage.setItem("shoppingCart", JSON.stringify(shoppingCartFromLS)); //this will happen for every item except the item that matches
        }
    }
解决方案

您需要以这种方式优化代码

var isFound = shoppingCartFromLS.some( function( item ){
   var isFound = item.id == movieId; //this line is updated
   item.amount += isFound ? 1 : 0;
   return isFound;
})
if (!isFound)
{
  shoppingCartFromLS.push( { id : movieId, amount : 1 } )
}
localStorage.setItem("shoppingCart", JSON.stringify(shoppingCartFromLS));

关于第一个for循环:你是对的,当我在编辑器中编辑代码时,这是一个打字错误。现在更新了。这是否改变了你的答案/解决方案?@Halalbin好的,这也是我的想法。在这种情况下,检查对问题的分析和解决方案。我没有让它发挥作用,也许我误解了你。如果我使用你的代码,不管电影有哪个id,id都会保持不变,但是数量会增加[{id:89,amount:27}]@Halalbin My bad,请检查更新。让我知道结果。