local storage的数据怎么和 o 的数据进行对比如果local storage的数据已经存在 o 的数据则不执行存储

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));
  • 以下回答由chatgpt基于相关博客总结生成:

    可以通过比较localStorage存储的数据和变量o的值来避免重复存储数据。具体实现步骤如下:

    1. 获取localStorage中存储的数据,转换成数组对象arrCar。
    2. 遍历数组arr中的每个元素,为其添加一个自定义属性isAdded,初始值设为false。
    3. 遍历添加按钮,为每个按钮添加事件监听器,当按钮被点击时执行以下操作:
    4. 获取对应商品的id和其他属性,用对象objCar存储。
    5. 遍历数组arrCar,使用find函数查找是否有相同id的商品,如果有,将该商品的isAdded值设为true,表示此商品已经被添加过,不需再次添加。
    6. 如果没有相同id的商品,则将objCar添加到数组arrCar中,并在objCar上添加num属性,初值为1。
    7. 将数组arrCar转换成JSON字符串,存储在localStorage中。
    8. 调用localCar函数更新购物车内容。
    9. 在localCar函数中更新购物车内容时,仅处理isAdded值为true的商品,避免重复生成已经存在的商品。
    10. 最后,在添加按钮的事件监听器中,还需要移除事件监听器,避免重复添加事件。

    具体代码如下:

    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 &lt; StoreGain.length; i++) {
  if (StoreGain[i].key === o.key) {
    exists = true;
    break;
  }
}

if (!exists) {
  StoreGain.push(o);
  localStorage.setItem('SearchStore', JSON.stringify(StoreGain));
}