【问题标题】:How to delete a specific item/object in localStorage?如何删除 localStorage 中的特定项目/对象?
【发布时间】:2015-04-06 09:31:08
【问题描述】:

原来我的 localStorage["items"] 将我的 JSON 存储为字符串。

"["{\"itemId\":1, \"itemName\":\"item1\"}", "{\"itemId\":2, \"itemName\":\"item2\"}",
"{\"\":3, \"itemName\":\"item3\"}",]"

这就是我 JSON.parse(localStorage["items"]) 时的样子:

["{"itemId":1, "itemName":"item1"}", "{"itemId":2, "itemName":"item2"}"
"{"itemId":3, "itemName":"item3"}"]

所以在我的循环中,我使用jQuery.parseJSON 将它变成了一个对象:

var object = jQuery.parseJSON(item[i]);

现在,我要做的是删除 itemId = 3 所在的对象,并确保该对象已完全从 localStorage 中删除。

到目前为止,这是我的 Javascript:

$("#button_delete").on("click", function(e){
  e.preventDefault();

  var items = JSON.parse(localStorage.getItem('items'));
    for (var i = 0; i < items.length; i++) {

      var object = JSON.parse(items[i]);
       if(object.request_id == 3){
         console.log(items) 
         delete items[i] // slice doesn't work not sure why
         console.log(items)
       }     
    }

    item = JSON.stringify(items);
    console.log(item);
    localStorage.setItem('items', item);
})

更新

当我现在点击按钮时,它会删除该项目,但不会删除它之前的逗号。

当我在浏览器中检查 localStorage["items"] 时,它会返回:

"["{\"itemId\":1, \"itemName\":\"item1\"}","{\"itemId\":2, \"itemName\":\"item2\"}",null]"

我有另一个页面将在 html 中显示信息并返回错误:

Uncaught TypeError: Cannot read property 'itemId' of null.

那么现在有没有办法在 localStorage["items"] 中专门检查或搜索 ,null 并将其删除以便不会显示错误?

关于如何在 HTML 中显示信息的代码:

    var items = JSON.parse(localStorage.getItem('items'));
    var itemsHTML = "";

    for(var i = 0; i < items.length; i++){

      var object = jQuery.parseJSON(items[i]);

      var displayItemId = object.itemId;
      var displayItemName = object.itemName;

      itemsHTML += "<li id="+displayItemId+">"+displayItemName+"</li>";
    }

    $("#viewItemList").html(itemsHTML); 

【问题讨论】:

  • splice() / slice() 将工作:)

标签: javascript jquery local-storage


【解决方案1】:

试试这个。

$("#button_delete").on("click", function(e){
  e.preventDefault();

  var items = JSON.parse(localStorage["items"]);
  for (var i = 0; i < items.length; i++) {
     if(items[i].itemId == 3){
       items.splice(i,1);
       break;
     }
  }
})

【讨论】:

    【解决方案2】:

    localstorage 只能包含字符串

    所以首先你必须从本地存储中解析项目(就像你现在所做的那样)

    从中删除你不想要的元素。

    再次将其序列化为 JSON 并存储在本地存储中。

    【讨论】:

      【解决方案3】:

      方法如下

      var items = localStorage["items"];
      for (var i =0; i< items.length; i++) {
          var item = JSON.parse(items[i]);
          if (item.itemId == 3) {
              items.slice(i);
              break;
          }
      }
      
      // Don't forget to store the result back in localStorage
      localStorage.setItem("items", items);
      

      【讨论】:

        【解决方案4】:

        所有答案都是正确的,但你必须这样做

        1. 将 localStorage 中的字符串解析为 JSON(您这样做了)
        2. 删除不需要的项目(使用 slice() )
        3. 将 JSON 转为字符串
        4. 在本地存储中重新设置

        所以:

        1.

        var items = JSON.parse(localStorage.getItem("items")); // updated
        

        2.

        for (var i =0; i< items.length; i++) {
            var items = JSON.parse(items[i]);
            if (items.itemId == 3) {
                items.splice(i, 1);
            }
        }
        

        3.

        items = JSON.stringify(items); //Restoring object left into items again
        

        4.

        localStorage.setItem("items", items);
        

        解析为 JSON 并将其存储为字符串有点烦人,但这就是 localStorage 的工作方式。

        【讨论】:

        • 你好,我用过你的方法,目前不行。我还更新了问题以更好地反映我的问题。
        • 控制台告诉你什么?有什么错误吗?一定要把console.log();更容易调试值。此外,代替 String() 尝试 items = items.toString();
        • 顺便问一下,localStorage['items'] 有效吗?尝试使用 localStorage.getItem('items')。
        • 我研究了一个项目,在该项目中我经常使用 localStorage,我使用 JSON.stringify() 对我的 JSON 数组进行字符串化。我更新了我的答案。
        • 请注意,您混淆了项目和项目(我选择只使用项目,因为它肯定是一个元素数组)。
        【解决方案5】:

        如果您知道特定项目的key - 请像这样简短而简单:

        if (localStorage.getItem('key_to_remove') != null)
                    localStorage.removeItem('key_to_remove');
        

        【讨论】:

          【解决方案6】:
           eliminar(est: string) {
               //estudiantes ES LA KEY
              var items = JSON.parse(localStorage.getItem('estudiantes'));
              for (var i = 0; i < items.length; i++) {
          
                var item = items[i];
                 if(item.id == est){
                   items.splice(i,1);
                 }     
              }
              items = JSON.stringify(items);
              localStorage.setItem('estudiantes', items);
              this.getAll();
             }
          

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多