【问题标题】:LocalStorage - Remove item by value and not key?LocalStorage - 按值而不是键删除项目?
【发布时间】:2016-09-07 20:56:16
【问题描述】:

好的,我在 LocalStorage 中有一个这样的 JSON:

[{"pseudo":"Lucia","id":2},{"pseudo":"Romain","id":1}]

我搜索了如何删除一项,但我只找到了这个:

storage.removeItem(keyName);

但是,如果我错了,请纠正我,如果我使用它,如果我执行 storage.removeItem(pseudo); 会删除 keyName "pseudo" 的所有值;

我怎样才能只从 json 中删除 {"pseudo":"Romain","id":1} 并保留 {"pseudo":"Lucia","id":2}

谢谢。

【问题讨论】:

  • 这是在本地存储中存储复杂对象的问题。您必须读取整个 JSON 对象,对其进行解析、修改、字符串化,然后保存修改后的对象。如果您想要复杂的数据对象和查询,您应该研究 IndexDB。
  • (1.) 从LocalStorage 获取数据 (2.) 解析它 (3.) 从解析的数组拼接object (4.) 再次stringify 数据 (5. ) 将其分配回LocalStorage

标签: javascript json local-storage


【解决方案1】:

localstorage 只支持字符串值,所以需要解析数据。

    var storedNames = JSON.parse(localStorage.getItem("keyName"));

    // here you need to make a loop to find the index of item to delete
    var indexToRemove = 1;

    //remove item selected, second parameter is the number of items to delete 
    storedNames.slice(indexToRemove, 1);

   // Put the object into storage
   localStorage.setItem('keyName', JSON.stringify(storedNames));

【讨论】:

  • 我不明白你在哪里删除了项目,我试过了,但是 localstorage 没有改变
  • .slice 方法从数组中删除项目
  • storedNames 和storedName 是一样的(你忘了一个“s”还是正常^^)?还是storedNames 是整个json?
  • 我忘了s,那个变量存储了本地存储项的所有数据
【解决方案2】:

LocalStorage 带有一个 length,因此您可以知道要存储多少个值,以及一个 key 方法,它可以让您在索引处找到一个键。

function removeLocalStorageValues(target) {
    let i = localStorage.length;
    while (i-- > 0) {
        let key = localStorage.key(i);
        if (localStorage.getItem(key) === target) {
            localStorage.removeItem(key);
        }
    }
}

【讨论】:

  • 我相信 OP 的意思是修改存储数组中的一个元素,而不是删除整个 localstorage 项。然而,标题和问题内容似乎有所不同。
猜你喜欢
  • 2014-12-27
  • 2013-10-17
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多