Пытаюсь хоть раз сделать фильм привлекательным

#javascript #local-storage #storage

#язык JavaScript #локальное хранилище #Хранение

Вопрос:

Я пытаюсь сделать фильмы привлекательными один раз, храня их в массиве, подобном этому:

 let likedMovies = []; const movieLike = document.getElementById("likeButton"); likedMovies = JSON.parse(localStorage.getItem("likedMovies")); movieLike.addEventListener("click", () =gt; {  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 Неучтенная ошибка типа: Не удается прочитать свойства null (чтение «indexOf») в HTMLDivElement.» и когда я регистрирую свой массив likedMovies, в нем говорится, что массивы «пустые», не могли бы вы помочь мне понять, почему это не работает ?

Комментарии:

1. Если пользователь откроет другой браузер, сможет ли он снова поставить лайк? Я думаю, что для этого нужна внутренняя обработка, и просто ограничение в интерфейсе, не обновляя «нравится»

2. как вы устанавливаете likedMovies на локальном хранилище ?

3. Совершенно ясно, что likedMovies этого больше нет localStorage .

4. @FaizalHussain с localStorage.setItem(«likedMovies», JSON.stringify(likedMovies)) внутри if

5. @WaisKamal как я могу вставить его обратно ?

Ответ №1:

Проблема в том, что вы переназначаете likedMovies с результатом JSON.parse , который равен нулю, если он не может его проанализировать.

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

Это должно устранить ошибку, но также вы можете выполнить некоторую оптимизацию, сохранив ее как объект.

 let likedMovies = JSON.parse(localStorage.getItem("likedMovies")) || {}; const movieLike = document.getElementById("likeButton"); movieLike.addEventListener("click", () =gt; {  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). Незначительное повышение производительности.