试图让一部电影变得讨人喜欢

Posted

技术标签:

【中文标题】试图让一部电影变得讨人喜欢【英文标题】:Trying to make a movie likeable one time 【发布时间】:2022-01-13 16:53:46 【问题描述】:

我正试图通过将电影存储在这样的数组中来使电影变得讨人喜欢:

let likedMovies = [];
const movieLike = document.getElementById("likeButton");
likedMovies = JSON.parse(localStorage.getItem("likedMovies"));
movieLike.addEventListener("click", () => 
  if (likedMovies.indexOf(allMovies[i].name) === -1) 
    confirm("Movie liked");
    axios.patch(`url`);
    likedMovies.push(allMovies[i].name);
    localStorage.setItem("likedMovies", JSON.stringify(likedMovies));
    return true;
  
  confirm("Movie already liked");
  return false;
);

它今天下午工作,但现在控制台显示一个错误日志,内容如下:“script.js:75 Uncaught TypeError: Cannot read properties of null (reading 'indexOf') 在 htmlDivElement。”,当我记录我的 likeMovies 数组时,它说数组的“null”,你能帮我理解为什么它不起作用吗?

【问题讨论】:

如果用户打开不同的浏览器,用户还能再点赞吗?我认为这需要后端处理,并且通过不更新“喜欢”来简单地限制前端 你是如何在 localStorage 上设置 likeMovies 的? 很明显likedMovies 已经不在localStorage 中了。 @FaizalHussain with localStorage.setItem("likedMovies", JSON.stringify(likedMovies)) 在 if 中 @WaisKamal 我怎样才能把它放回去? 【参考方案1】:

问题是您正在使用 JSON.parse 的结果重新分配 likedMovies,如果它无法解析,则该结果为 null。

let likedMovies = JSON.parse(localStorage.getItem("likedMovies")) || [];

这应该可以解决错误,但您也可以通过将其存储为对象来进行一些优化。

let likedMovies = JSON.parse(localStorage.getItem("likedMovies")) || ;
const movieLike = document.getElementById("likeButton");
movieLike.addEventListener("click", () => 
  if (likedMovies[allMovies[i].name]) 
    confirm("Movie liked");
    axios.patch(`url`);
    likedMovies[allMovies[i].name] = true;
    localStorage.setItem("likedMovies", JSON.stringify(likedMovies));
    return true;
  
  confirm("Movie already liked");
  return false;
);

现在您的搜索将不会发生在 O(n) 的线性时间中,而是在常数 O(1) 中发生。微小的性能提升。

【讨论】:

以上是关于试图让一部电影变得讨人喜欢的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 | 创建自己的电影推荐系统

从上海堡垒谈谈为什么烂电影喜欢用流量明星

看《米花之味》

怎么样才能让一个人的手机被打爆

怎么样才能让一个人的手机被打爆

无题