代码之家  ›  专栏  ›  技术社区  ›  Lion Smith

如果存在选定的新数据,如何从本地存储更新数据

  •  1
  • Lion Smith  · 技术社区  · 6 年前

    我现在想做的是,如果用户选择了相同的项,则更新存储的数据。

    例如 我已经储存了

    [{
     "id": "1",
     "name": "soap A",
     "quantity": "10",
     "price" : "50.00"
    },
    {
     "id": "2",
     "name": "soap X",
     "quantity": "10",
     "price" : "50.00"
    }]
    

    用户再次选择了带有 id 1 "soap A" )数量是 "15" ,我当前的结果如下

    [{
         "id": "1",
         "name": "soap A",
         "quantity": "10",
         "price" : "50.00"
        },
        {
         "id": "2",
         "name": "soap X",
         "quantity": "10",
         "price" : "50.00"
        },
        {
         "id": "1",
         "name": "soap A",
         "quantity": "15",
         "price" : "50.00"
        }]
    

    我想做的是更新本地存储中是否存在具有相同ID的对象。它看起来像这样

    [{
         "id": "1",
         "name": "soap A",
         "quantity": "25",
         "price" : "50.00"
        },
        {
         "id": "2",
         "name": "soap X",
         "quantity": "10",
         "price" : "50.00"
        }]
    

    这是我插入本地存储的脚本。

    var oldItems = JSON.parse(localStorage.getItem('itemsArray')) || [];
        var newItem = {
              'id' : $('#itemId').val(),
              'name': $('#productName').val(),
              'quantity': $('#quantity').val(),
              'price': $('#productPrice').val(),
    
          };
           oldItems.push(newItem);
    
    localStorage.setItem('itemsArray', JSON.stringify(oldItems));
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   CertainPerformance    6 年前

    你需要 find id 在当前数组中,如果存在。如果是,则指定给该元素-否则,按一个新元素。

    const oldItems = JSON.parse(localStorage.getItem('itemsArray')) || [];
    const idToUse = $('#itemId').val();
    const existingItem = oldItems.find(({ id }) => id === idToUse);
    if (existingItem) {
      Object.assign(existingItem, {
        'name': $('#productName').val(),
        'quantity': existingItem.quantity + $('#quantity').val(),
        'price': $('#productPrice').val(),
      })
    } else {
      const newItem = {
        'id' : idToUse,
        'name': $('#productName').val(),
        'quantity': $('#quantity').val(),
        'price': $('#productPrice').val(),
    
      };
      oldItems.push(newItem);
    }
    
    localStorage.setItem('itemsArray', JSON.stringify(oldItems));