Как вывести sh новый объект в массив, если его еще нет в localStorage - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь реализовать простую функцию «добавить в избранное», но не могу заставить все работать в локальном хранилище.

Я могу выложить sh объект / массив в локальное хранилище и получить его обратно, но когда я нажимаю на следующий элемент, чтобы добавить его в избранное, я перезаписываю предыдущий, а не добавляю новый объект в массив.

код ниже:

 const push1 = async (movieId, movieName, image) => {
    const stringId = JSON.stringify(movieId);
    const stringName = JSON.stringify(movieName);
    const stringImage = JSON.stringify(image);

    // our array
    let moviesList = [];

    // our object
    let movies = {
      movieId: stringId,
      movieName: stringName,
      image: stringImage
    };

    moviesList.push(movies);

    // storing our array as a string
    localStorage.setItem("movieList", JSON.stringify(moviesList));

    let updatedMoviesList = [];

    const retrievedMovies = localStorage.getItem("movieList");
    const parseRetrievedMovies = JSON.parse(retrievedMovies);
    console.log("retrievedMovies: ", retrievedMovies);
    console.log("parseRetrievedMovies: ", parseRetrievedMovies);
    parseRetrievedMovies.push(movies);
};

Как я могу обновить массив, если такого же объекта еще нет?

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Возможно, вы можете использовать Set() вместо этого, что поможет вам хранить уникальные фильмы в localStorage.

Попробуйте выполнить следующее:

const stringId = '12';
const stringName = 'Name';
const stringImage = '<img-url>';

const moviesList = new Set();

const movie = {
  movieId: stringId,
  movieName: stringName,
  image: stringImage
};

moviesList.add(JSON.stringify(movie));
console.log('first attempt', JSON.parse(Array.from(moviesList)));

moviesList.add(JSON.stringify(movie));
console.log('second attempt', JSON.parse(Array.from(moviesList)));

Надеюсь, это поможет!

0 голосов
/ 06 апреля 2020

Ваша функция не читает старые настройки. Вместо этого вы начинаете с нового пустого массива:

let moviesList = [];

Здесь вы можете вместо этого загрузить данные, сохраненные в прошлый раз, например:

let moviesList = localStorage.getItem("movieList");

Затем измените их, добавив новый mov ie, затем сохраните, как вы уже делаете.

Надеюсь, это поможет.

0 голосов
/ 06 апреля 2020

Проверьте, есть ли объект в полученных фильмах, используя array.some и только если его нет pu sh it.

const retrievedMovies = localStorage.getItem("movieList");
if(retrievedMovies) {
   const parseRetrievedMovies = JSON.parse(retrievedMovies);
   console.log("retrievedMovies: ", retrievedMovies);
   console.log("parseRetrievedMovies: ", parseRetrievedMovies);
   const movieExists = parseRetrievedMovies.some((m) => movies.movieId === m.movieId ))
   if(!movieExists) {
      parseRetrievedMovies.push(movies);
   }
}
...