Добавить новые данные в массив объектов по клику

На странице есть список новостной статьи. Каждый раз, когда пользователь нажимает на него, он сохраняет идентификатор и заголовок новости в localalstorage. Мой код заменяет данные локального хранилища каждый раз, когда я нажимаю новый элемент.

Как добавить новые данные в localStorage?

Установка localStorage

awardForArticleRead: function(latestNews){
    var articleData = {};
    articleData['newsId'] = latestNews.news_id;
    articleData['newsTitle'] = latestNews.title;
    localStorage.setItem("articleRead",  JSON.stringify(articleData));
},

вызывая функцию, пока она идет на страницу с подробностями

    newsDetail: function(key, id) {
    var _this=this;

    newsDetail = API_DATA['getLatestNews'][key];

    myApp.mainView.loadPage('news1.html');
    myApp.onPageInit("news_detail", function(page){
        _this.awardForArticleRead(newsDetail);
        _this.showNewsDetails(newsDetail);
    })       

},

2 ответа

Решение

Вам нужно прочитать старые данные, преобразовать в объект (JSON.parse), добавить новые данные, а затем записать исправленные данные в localStorage.

awardForArticleRead: function(latestNews){
    var store = JSON.parse(localStorage.getItem("articleRead") || '[]');
    store.push({
        newsId: latestNews.news_id,
        newsTitle: latestNews.title
    });
    localStorage.setItem("articleRead",  JSON.stringify(store));
},

это приведет к массиву элементов, например:

[{
    newsId: 1,
    newsTitle: 'title 1'
}, {
    newsId: 2,
    newsTitle: 'title 2'
}, {
    newsId: 3,
    newsTitle: 'title 3'
}]

поэтому другой код, который читает localStorage, должен быть изменен соответствующим образом

В качестве альтернативы:

awardForArticleRead: function(latestNews){
    var store = JSON.parse(localStorage.getItem("articleRead") || '{}');
    store[latestNews.news_id] = latestNews.title;
    localStorage.setItem("articleRead",  JSON.stringify(store));
}

приведет к тому, что данные будут:

{ 
    1: 'title1',
    2: 'title2',
    3: 'title3',
}

где 1,2,3 - это news_id

Поскольку вы не показали, как используются данные localStorage (прочитайте), я не могу сказать, какой вариант лучше для вас

Не существует функции добавления или добавления набора, однако вы можете просто собрать старые данные, объединить их в коде и заменить новые данные в локальном хранилище.

Что-то вроде этого:

function addToLocalStorage(nameOfItem, newData){
    var oldData = localStorage.getItem(nameOfItem);
    if(oldData !== null) {
        localStorage.setItem(nameOfItem, oldData + newData);
    } else {
        localStorage.setItem(nameOfItem, newData);
    }
}
Другие вопросы по тегам