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