我有一个纯JavaScript项目,正在将项目保存到本地存储。我只需要保存我要保存的项目的id
,name
和image
。
但是我的主要问题是我不想保存重复项。因此在保存之前,我必须检查是否存在。
到目前为止,我已经尝试了几种方法,但是似乎都行不通。下面是我的代码段。
我能够毫无问题地将项目保存到本地存储中,事实上,我可以正确地从本地存储中保存和删除项目。
const cart_DB = new cartDB();
if( cart_DB.isAddedToCart(cartInfo.id) === false) {
// save item to database
}else {
alert('item already in cart');
return false;
}
class cartDB {
/// save cart into localstorage ////
saveIntoDB(cart) {
const carts = this.getFromDB();
carts.push(cart);
// add the new array into localstorage
localStorage.setItem('carts', JSON.stringify(carts));
}
/// save cart into localstorage ///
/// return carts from storage ///
getFromDB() {
let carts;
// check from local storage
if (localStorage.getItem('carts') === null) {
carts = [];
} else {
carts = JSON.parse(localStorage.getItem('carts'))
}
return carts;
}
/// carts from storage ends ///
/// check if item already exists in database ////////
isAddedToCart(id) {
if (localStorage.getItem(id) === null
||localStorage.getItem(id).length === 0) {
return false;
}else {
return true;
}
}
//// checking items ends here ///////
}
我想要的是在添加另一个项目之前检查该项目是否存在。
答案 0 :(得分:1)
假设您将商品存储在数组中,则可以使用以下功能检查商品是否已存在:
function checkIfItemExists (id) {
const items = localStorage.getItem('carts') // assumes that 'carts' is an array
let itemExists = false
if (items) {
const itemsData = JSON.parse(items)
// check if item with given id exists in local storage data
itemExists = itemsData.find(item => item.id === id)
}
return itemExists
}
答案 1 :(得分:0)
如果您的目标是找出是否有重复项,Array.some()
将是您要寻找的最佳功能。像这样将其实现为您的功能。
isAddedToCart(id) {
const carts = localStorage.getItem('carts');
return carts.some(cart => cart.id == id);
}
Array.some()的定义和用法
some()方法检查数组中的任何元素是否通过了 测试(作为功能提供)。
some()方法对每个存在的元素执行一次功能 在数组中:
如果找到函数返回真值的数组元素,则some()返回真(并且不检查其余 值)
否则它将返回false