Нажимайте объекты JSON для массива в localStorage
У меня есть функция в Javascript:
var a = [];
function SaveDataToLocalStorage(data)
{
var receiveddata = JSON.stringify(data);
a.push(receiveddata);
alert(a);
localStorage.setItem('session', a);
}
параметр данных - это объект JSON.
Но каждый раз, когда я нажимаю кнопку, он перезаписывает данные в моем локальном хранилище.
Кто-нибудь знает, как это сделать?
Ответы
Ответ 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