[英]Remove entire array from local storage
如何在没有localStorage.clear();
情况下完全删除localStorage localStorage.clear();
方法?
我有一个购物车,您可以在其中存储您将要购买的产品,并且存储在本地存储中进行。 目前“清除购物车”按钮与localStorage.clear();
方法,但我也有一个表格,您可以在其中删除单个产品。 但是,如果您使用同一行上的“删除”按钮删除整个表,并且它恰好是最后一个产品,则本地存储仍将有一个空数组,并被视为 NOT null 。
这是我删除项目的方法:
function removeItem(itemId) {
//removes the parent row of table
$('#product-table').on('click', '.remove-item', function(e) {
$(this).closest('tr').remove();
});
var index = -1;
var obj = JSON.parse(localStorage.getItem("items")) || {}; //fetch cart from storage
var items = obj || []; //get the products
$.each(items, function(key, value) {
if (key === itemId) {
items.splice(key, 1); //remove item from array
}
});
localStorage.setItem("items", JSON.stringify(obj)); //set item back into storage
sum = 0;
$.each(items, function(key, value) {
sum += value.itemPrice;
});
$("#summary").html(sum.toFixed(2) + "€");
updateCartCount();
}
它正确删除了项目,但是每当我删除最后一个产品时, table
元素并添加一个段落,说“您的购物车是空的。返回商店”。
以下功能如下:
function hideElements() {
if ($(".cart-wrapper").length) {
if (localStorage.getItem("items") === null) {
$("#products").css("display", "none");
$("#empty").css("display", "block");
$(".btn-clear").css("display", "none");
} else {
$("#products").css("display", "block");
$("#empty").css("display", "none");
$(".btn-clear").css("display", "block");
}
}
}
hideElements 函数不会将本地存储识别为空,因为它表明存在一个空数组对象。
如果移除的产品是购物车上的最后一个产品,我如何通过移除整个本地存储来实现这一点? 我尝试了localStorage.getItems("items").length != 0
等,但无济于事。
下图显示了我的“空”本地存储:
localstorage.get()
返回的是字符串而不是 JSON,因此您需要做的是解析字符串,即localStorage.getItem('items')
返回长度等于 2 的"[]"
。您需要做的是JSON.parse(localstorage.getItem('item')).length
您可能正在寻找localStorage.removeItem()
。
更好的是,您应该重构一些东西,以便有一些函数专门负责管理本地存储中的 items 数组:
function loadItems() {
// Returns the value of items, or an empty array.
return JSON.parse(localStorage.getItem("items") || "[]");
}
function saveItems(itemsArr) {
localStorage.setItem("items", JSON.stringify(itemsArr));
}
// Remove item with given ID (assuming each element in the array is e.g. `{id: 123}`)
const itemId = 123;
saveItems(loadItems().filter(item => item.id !== itemId));
// Update cart HTML elements:
if ($(".cart-wrapper").length) {
const haveItems = loadItems().length > 0;
$("#products").toggle(!haveItems);
$("#empty").toggle(haveItems);
$(".btn-clear").toggle(!haveItems);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.