如何删除localStorage中的特定项目/对象?

ahf*_*eak 5 javascript jquery local-storage

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

"["{\"itemId\":1, \"itemName\":\"item1\"}", "{\"itemId\":2, \"itemName\":\"item2\"}",
"{\"\":3, \"itemName\":\"item3\"}",]"
Run Code Online (Sandbox Code Playgroud)

这是当我JSON.parse(localStorage [“ items”])时的样子:

["{"itemId":1, "itemName":"item1"}", "{"itemId":2, "itemName":"item2"}"
"{"itemId":3, "itemName":"item3"}"]
Run Code Online (Sandbox Code Playgroud)

所以在我的循环中,我通过使用jQuery.parseJSON以下命令将其变成一个对象:

var object = jQuery.parseJSON(item[i]);
Run Code Online (Sandbox Code Playgroud)

现在,我想做的是删除对象,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);
})
Run Code Online (Sandbox Code Playgroud)

更新

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

当我在浏览器中检查localStorage [“ items”]时,它返回以下内容:

"["{\"itemId\":1, \"itemName\":\"item1\"}","{\"itemId\":2, \"itemName\":\"item2\"}",null]"
Run Code Online (Sandbox Code Playgroud)

我有另一个页面,它将在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); 
Run Code Online (Sandbox Code Playgroud)

skm*_*war 5

试试这个。

$("#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;
     }
  }
})
Run Code Online (Sandbox Code Playgroud)


eng*_*nws 5

所有的答案都是正确的,但你必须:

  1. 将 localStorage 中的字符串解析为 JSON(你做到了)
  2. 删除您不想要的项目(使用 slice() )
  3. 将 JSON 转换为字符串
  4. 在localStorage中重新设置

所以 :

1.

var items = JSON.parse(localStorage.getItem("items")); // updated
Run Code Online (Sandbox Code Playgroud)

2.

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

3.

items = JSON.stringify(items); //Restoring object left into items again
Run Code Online (Sandbox Code Playgroud)

4.

localStorage.setItem("items", items);
Run Code Online (Sandbox Code Playgroud)

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