Как обновить значение объекта в локальном хранилище - PullRequest
0 голосов
/ 26 марта 2020

Я занимаюсь созданием простого трекера для ТВ-шоу (который я видел / смотрю в данный момент), и поскольку я не бэкенд, я решил сохранить все данные в локальном хранилище. Прямо сейчас я могу без проблем хранить все шоу в локальном хранилище. Проблема возникает, когда мне нужно обновить данные в локальном хранилище (чтобы дать вам конкретный пример c - посмотрите на экран ниже):

снимок экрана моего списка с показом локального хранилища

Как видите, у меня есть эти кнопки для регулировки количества сезонов и эпизодов шоу (они работают просто отлично). Но я понятия не имею, как хранить это обновленное значение и это значение только в локальном хранилище. Ниже вы можете найти код, который читает данные из локального хранилища и использовать их для создания списка:

    function readFromMemory(){
    const data = JSON.parse(localStorage.getItem('seriale'));
    data.forEach(element => {
        serialeMemory.push(element);
        let serialInMemory = new SerialeList(element.pos, element.img, element.name, element.score, element.userEpisodes, element.episodes,element.userSeasons, element.seasons, element.status, element.id);
        serialInMemory.inject(); //Creates list from class
        serialInMemory.episodeUpDown(); //Gives functionality to episodes buttons
        serialInMemory.seasonUpDown(); //Give functionality to seasons buttons
    });
    deleteSerialRow(); //method to delete the whole row from list and from local storage
}

Я знаю, как отфильтровать, чтобы показать только то, что я хочу, используя метод Array.prototype.filter. Но я не знаю, как вывести sh только этот ряд в localstorage.

Я был бы очень рад любой мысли.

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Что ж, поскольку вы используете только один ключ («seriale»), другого способа десериализации, изменения объекта соответствующим образом (например, используя Array.prototype.splice), сериализации и вызова * нет. 1004 * с тем же ключом и обновленным и сериализованным объектом.

0 голосов
/ 26 марта 2020

Если честно, я вроде решил это сам. Вот метод, который работает:

updateSeasons(id, changeValue){
    const data = JSON.parse(localStorage.getItem('seriale'));
    const filter = data.filter(element => element.id === id);
    filter[0].userSeasons = changeValue;
    for(let i = 0; i< serialeMemory.length; i++){
        if(serialeMemory[i].id === filter[0].id) serialeMemory[i].userSeasons = changeValue;
    }
    localStorage.setItem('seriale', JSON.stringify(serialeMemory));

}

Я использовал тот же самый массив, который я продолжал выдвигать во время события DOMLoad, и он работает просто отлично. Но да, мне, вероятно, следовало бы прикрепить ключ к каждому шоу, но я думаю, что я в порядке с моим решением. Все равно спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...