本地存储在调用时不删除数组中的对象,使用 localStorage.remove 方法

问题描述 投票:0回答:3

我正在构建一个电影观看列表,将电影存储在我的本地存储中,并删除它们。这是我的代码的两个 CodePens,一个用于搜索和添加:

https://codepen.io/vanessalearnsjavascript/pen/vYVJPgm?editors=0011

另一个是删除的“监视列表”页面:

https://codepen.io/vanessalearnsjavascript/pen/YzJEQEW?editors=0011

    removeMovieButton.addEventListener("click", function() {
      watchList.splice(watchList.indexOf(movie), 1);
      movieDiv.parentNode.removeChild(movieDiv);
      localStorage.removeItem("movie" + watchList.indexOf(movie));
    });

在 WatchList 页面上,我设置了一个“删除电影”按钮,可以从数组和 DOM 中删除电影,但它的本地存储不起作用。这是 removeMovie 按钮,其中包含未执行的本地存储行。我可以按下按钮,它将项目从数组和 DOM 中删除,但是当我打开本地存储时,它仍然存在。

任何人都可以解释我如何解决这个问题以及为什么会这样吗?谢谢。

javascript local-storage
3个回答
0
投票

你只需更改执行顺序,所以替换这个

 removeMovieButton.addEventListener("click", function() {
      watchList.splice(watchList.indexOf(movie), 1); // <-------- 1
      movieDiv.parentNode.removeChild(movieDiv);
      localStorage.removeItem("movie" + watchList.indexOf(movie)); // <------ 2
    });

by

 removeMovieButton.addEventListener("click", function() {
      localStorage.removeItem("movie" + watchList.indexOf(movie)); // < ---- 2
      movieDiv.parentNode.removeChild(movieDiv);
      watchList.splice(watchList.indexOf(movie), 1);// < ---- 1
    });

解释: 你正在从数组中删除电影然后你得到一个错误的“已经”删除项目的索引以将其从 localStorage 中删除,这就是它对你不起作用的原因。


0
投票

为什么不起作用?您删除该项目,然后尝试再次找到该项目。删除后你会找到它吗?

removeMovieButton.addEventListener("click", function() {
      watchList.splice(watchList.indexOf(movie), 1); <-- You remove the entry
      movieDiv.parentNode.removeChild(movieDiv);
      localStorage.removeItem("movie" + watchList.indexOf(movie)); <-- you look for it again
    });

现在您可以将索引存储到变量中,但是当您删除索引时,所有其他条目都会向下移动一个。所以这意味着数组中的

movie4
将位于索引 3,而不是 4。因此您必须调整所有本地存储键。

只需存储数组!

watchList.splice(watchList.indexOf(movie), 1);
localStorage.setItem('watchList', JSON.stringify(watchList));

需要看表的时候就看

watchList = JSON.parse(localStorage.getItem('watchList') || '[]');

0
投票

基本上

localStorage
是一个全局变量,当浏览器重新加载时它不会消失。也可以用于选项卡之间的通信

let data = { name: 'luci', age: 26 }

// localStorage.setItem(str)
localStorage.globalObj = JSON.stringify(data)

// localStorage.getItem(str)
console.log(localStorage.globalObj) // {"name":"luci","age":26}
let _data = JSON.parse(localStorage.globalObj)
delete _data.age

localStorage.globalObj = JSON.stringify(_data)
console.log(localStorage.globalObj) // {"name":"luci"}
© www.soinside.com 2019 - 2024. All rights reserved.