local storage的数据怎么和 o 的数据进行对比如果local storage的数据已经存在 o 的数据则不执行存储
var StoreGain = JSON.parse(localStorage.getItem('SearchStore')) || [];
var StoreVal = 数据;
var o = {
key:e,
value:StoreVal,
name:d,
};
localStorage.setItem('SearchStore',JSON.stringify(o));
可以通过比较localStorage存储的数据和变量o的值来避免重复存储数据。具体实现步骤如下:
具体代码如下:
let arr = [
{
id: 1,
pname: "xiaomi",
pprice: 3000
},
{
id: 2,
pname: "huawei",
pprice: 5000
},
{
id: 3,
pname: "iphone11",
pprice: 7000
}
]
let carJson = localStorage.getItem('car')
let arrCar = []
if (carJson) {
arrCar = JSON.parse(carJson)
}
arr.forEach(v => {
v.isAdded = false // 标识该商品是否已经被添加到购物车中
})
const addBtns = document.querySelectorAll('.list button')
addBtns.forEach((btn, index) => {
btn.addEventListener('click', function() {
// 获取商品信息
let id = arr[index].id;
let objCar = { ...arr[index] };
// 查找数组arrCar中是否已经添加了该商品
let jsondel = arrCar.find(v => v.id == id)
if (jsondel) {
jsondel.num++, jsondel.isAdded = true; // 标识该商品已经添加过
} else {
objCar.num = 1;
objCar.isAdded = true;
arrCar.push(objCar);
}
localStorage.setItem('car', JSON.stringify(arrCar));
// 移除事件监听器
btn.removeEventListener('click', arguments.callee);
localCar();
});
});
function localCar() {
let html = '';
arrCar.forEach(v => {
// 仅处理已添加过的商品
if (v.isAdded) {
html += `<li>
<h2>${v.pname}</h2>
<p>${v.pprice}</p>
<p class='p'>${v.num}</p>
<p class='price'>总价:${v.num * v.pprice}</p>
<button class='but1'>-</button>
<button class='but2'>+</button>
<button class='but3'>删除</button>
</li>`
}
})
car.innerHTML = html;
// ...
}
getItem获取下SearchStore, 如果不存在就不执行你上面的这个逻辑
var StoreGain = JSON.parse(localStorage.getItem('SearchStore')) || [];
var StoreVal = 数据;
var o = {
key: e,
value: StoreVal,
name: d,
};
var exists = false;
for (var i = 0; i < StoreGain.length; i++) {
if (StoreGain[i].key === o.key) {
exists = true;
break;
}
}
if (!exists) {
StoreGain.push(o);
localStorage.setItem('SearchStore', JSON.stringify(StoreGain));
}