Подтвердить что ты не робот

Нажимайте объекты JSON для массива в localStorage

У меня есть функция в Javascript:

var a = [];
function SaveDataToLocalStorage(data)
{       
    var receiveddata = JSON.stringify(data);
    a.push(receiveddata);
    alert(a);

    localStorage.setItem('session', a);

}

параметр данных - это объект JSON.

Но каждый раз, когда я нажимаю кнопку, он перезаписывает данные в моем локальном хранилище.

Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 1

Для правильного хранения этой информации в локальном хранилище необходимо выполнить несколько шагов. Прежде чем перейти к коду, обратите внимание, что localStorage (в настоящее время) не может хранить любые типы данных, кроме строк. Вам понадобится сериализовать массив для хранения, а затем проанализировать его обратно, чтобы внести в него изменения.

Шаг 1:

Первый фрагмент кода ниже должен запускаться только в том случае, если вы уже не храните сериализованный массив в переменной localStorage session.
Чтобы обеспечить правильную настройку localStorage и сохранение массива, сначала выполните следующий фрагмент кода:

var a = [];
a.push(JSON.parse(localStorage.getItem('session')));
localStorage.setItem('session', JSON.stringify(a));

Вышеприведенный код должен запускаться только один раз и только в том случае, если вы уже не храните массив в своей локальной конфигурации session. Если вы уже делаете это, переходите к шагу 2.

Шаг 2:

Измените свою функцию следующим образом:

function SaveDataToLocalStorage(data)
{
    var a = [];
    // Parse the serialized data back into an aray of objects
    a = JSON.parse(localStorage.getItem('session'));
    // Push the new data (whether it be an object or anything else) onto the array
    a.push(data);
    // Alert the array value
    alert(a);  // Should be something like [Object array]
    // Re-serialize the array back into a string and store it in localStorage
    localStorage.setItem('session', JSON.stringify(a));
}

Это должно заботиться обо всем остальном. Когда вы проанализируете его, он станет массивом объектов.

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

Ответ 2

На данный момент вы можете хранить только строковые значения в localStorage. Вам нужно будет сериализовать объект массива, а затем сохранить его в localStorage.

Например:

localStorage.setItem('session', a.join('|'));

или

localStorage.setItem('session', JSON.stringify(a));

Ответ 3

Включение целого массива в одну запись localStorage очень неэффективно: все это нужно перекодировать каждый раз, когда вы добавляете что-то в массив или меняете одну запись.

Альтернативой является использование http://rhaboo.org, в котором хранится любой объект JS, какой бы глубокой он ни был, с использованием отдельной записи localStorage для каждого значения терминала. Массивы восстанавливаются гораздо более достоверно, включая нечисловые свойства и различные типы разреженности, прототипы/конструкторы объектов восстанавливаются в стандартных случаях, и API нелепо прост:

var store = Rhaboo.persistent('Some name');
store.write('count', store.count ? store.count+1 : 1);

store.write('somethingfancy', {
  one: ['man', 'went'],
  2: 'mow',
  went: [  2, { mow: ['a', 'meadow' ] }, {}  ]
});  
store.somethingfancy.went[1].mow.write(1, 'lawn');

Кстати, я написал это.

Ответ 4

Я могу предложить вам расширить объект хранения для обработки объектов и массивов.

LocalStorage может обрабатывать только строки, чтобы вы могли добиться этого с помощью этих методов.

Storage.prototype.setObj = function(key, obj) {
    return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
    return JSON.parse(this.getItem(key))
}

Используя его, каждое значение будет преобразовано в строку json на set и проанализировано на get

Ответ 5

Я думаю, вы должны сначала получить данные из localStorage, сделать с ним манипуляцию и повторно отправить ее.

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

var a = [];
function SaveDataToLocalStorage(data)
        {
            a = localStorage.getItem('session');
            var receiveddata = JSON.stringify(data);
            a.push(receiveddata);
            alert(a);

            localStorage.setItem('session', a);

        }

Ответ 6

var arr = [ 'a', 'b', 'c'];
arr.push('d'); // insert as last item