#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). Незначительное повышение производительности.