【问题标题】:localStorage.removeItem() not removing key/value from objectlocalStorage.removeItem() 不从对象中删除键/值
【发布时间】:2019-12-03 19:09:00
【问题描述】:

正在努力解决这个问题......

我正在尝试从我的 localStorage 对象中删除一个键/值对。但是,没有任何东西被删除。 (我也没有任何错误)。

我知道我可以删除有问题的键/值,通过它的键名。这是对象的示例:

   bookMarksArray:    [
        {
            "name": "reena",
            "url": "brian"
        },
        {
            "name": "joe",
            "url": "ault"
        }
       ]

这是我的代码...我正在使用事件目标来获取键名并将其匹配到对象索引。

然后将该对象索引的键传入 localStorage.removeItem()...我做错了什么?

  list.addEventListener('click', event => {
    if (event.target.classList.contains('js-delete-url')) {

      const editName = event.target.parentElement.name.value;
      const objIndex = bookMarksArray.findIndex(obj => obj.name === editName);

      localStorage.removeItem(bookMarksArray[objIndex].name);
      console.log('delete', bookMarksArray[objIndex].name);
    }
  });

控制台打印:

app.js:55 删除 reena

谢谢!

【问题讨论】:

  • 您不能删除特定的数组项(因为它存储为字符串),将整个数组放入一个 javascript 变量中,然后删除该项并再次将更新的变量推送到本地存储。
  • 控制台语句是否打印了您要删除的确切名称?
  • 我相信这里有一些误解。 localStorage 存储一个字符串,而不是一个对象。您想从对象中删除键/值对,还是要删除特定的localStorage 键?
  • 嗨@GangadharGandi - 是的,它会返回:delete app.js:52 objIndex 0 app.js:54 removeObj.name) reena app.js:55 delete reena
  • @GerardoFurtado - 所以我想删除整个键/值。喜欢的名字:乔,网址:ault - 谢谢

标签: javascript arrays object local-storage web-storage


【解决方案1】:

LocalStoage 将值保存为字符串格式,所以每次都需要对 JSON 对象进行字符串化才能保存在 localStorage 中,我们可以解决这个问题,请看下面的代码 sn-p,在这种情况下很有用,

var updateStorage = function(filterName) {
	var bookMarksArray=   [{"name": "reena", "url": "brian"}, {"name": "joe", "url": "ault"}]
	localStorage.setItem('nameList', JSON.stringify(bookMarksArray));
      var items = JSON.parse(localStorage.getItem('nameList'));
	var updatedList = items.filter(function(a) {
          return a.name !== filterName;
      });
	localStorage.setItem('nameList', JSON.stringify(updatedList));
	console.log(localStorage.getItem('nameList'));
    // result [{"name":"reena","url":"brian"}]
};
updateStorage('joe');

【讨论】:

  • 您好-Sarvesh/OutofWorld = 这些工作完美,非常感谢。我犯了一个错误,首先没有意识到这是一个字符串,所以不可编辑。而且,我必须操纵数组。非常感谢你们!
【解决方案2】:
//set js object to localstorage
localStorage.setItem('bookMarksArray',JSON.stringify(bookMarksArray))

//get js object from localstorage
bookMarksArray= JSON.parse(localStorage.getItem('bookMarksArray'))

//remove desired item
bookMarksArray = bookMarksArray.filter(function(item) {
    return item.name !== 'reena';
});

//update js object in localstorage
localStorage.setItem('bookMarksArray',JSON.stringify(bookMarksArray))

【讨论】:

  • 请不要从同一个答案中复制代码。请维护本门户的完整性
  • 对不起老兄,但我没有复制你的代码。只需检查我的 cmets 关于程序的问题。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2018-03-10
  • 2018-05-27
相关资源
最近更新 更多