Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Дописать в localStorage (https://javascript.ru/forum/misc/76460-dopisat-v-localstorage.html)

CryNet 13.01.2019 20:47

Дописать в localStorage
 
В localStorage есть ключ label со значением. Как дописать к этому же значению?

Неработающая реализация:
var _local = {}; // создаём массив

_local = JSON.parse(localStorage.getItem('label')); // записываем в массив существующие данные из localStorage
_local.push(label); // тут не работает - _local.push is not a function
localStorage.setItem('label', JSON.stringify(_local)); // записываем значения массива обратно в localStorage

Заранее благодарю за помощь :)

laimas 13.01.2019 21:12

var _local = []; // создаём массив

CryNet 13.01.2019 21:20

Цитата:

Сообщение от laimas (Сообщение 501948)
var _local = []; // создаём массив

Спасибо. Но всё равно не работает.

Malleys 13.01.2019 21:28

может так
var _local = JSON.parse(localStorage.label || "[]");
_local.push(label);
localStorage.label = JSON.stringify(_local);

и переменная label должна быть объявлена!

Если всё-равно не работает, то выполните в консоли браузера
localStorage.label = "[]"

рони 13.01.2019 21:28

CryNet,
var _local = JSON.parse(localStorage.getItem('label')||'[]');
_local.push(label);
localStorage.setItem('label', JSON.stringify(_local));

laimas 13.01.2019 21:29

Цитата:

Сообщение от CryNet
всё равно не работает

Это исключает ошибку вот тут - _local.push(label); // тут не работает - _local.push is not a function

А что вы дальше хотите, зачем объявлять массив _local, после чего выполнять _local = JSON.parse(localStorage.getItem('label'));, это за гранью моего понимания. ) Может просто словами объяснить - что есть, чего хочется, и т.д.?

CryNet 13.01.2019 21:33

Цитата:

Сообщение от Malleys (Сообщение 501956)
и переменная label должна быть объявлена!

Она объявлена выше:
var label = document.getElementById('setLabel').value;

CryNet 13.01.2019 21:42

Цитата:

Сообщение от laimas (Сообщение 501958)
Это исключает ошибку вот тут - _local.push(label); // тут не работает - _local.push is not a function

А что вы дальше хотите, зачем объявлять массив _local, после чего выполнять _local = JSON.parse(localStorage.getItem('label'));, это за гранью моего понимания. ) Может просто словами объяснить - что есть, чего хочется, и т.д.?

Основная задача - дописать данные в localStorage к уже существующим - используется один и тот же ключ. Я читал, что так просто дописать нельзя. Поэтому я:
  1. Создал массив _local;
  2. Записал в массив данные из localStorage преобразовав их: _local = JSON.parse(localStorage.getItem('label'));
  3. Дальше нужно дописать в созданный в п.1 массив: _local.push(label); - но тут не робить у меня
  4. А после хочу перезаписать данные в localStorage в том же ключе.

Идею взял отсюда: stackoverflow

Может есть адекватней решение, я не знаю :)

CryNet 13.01.2019 21:44

Цитата:

Сообщение от рони (Сообщение 501957)
CryNet,
var _local = JSON.parse(localStorage.getItem('label')||'[]');
_local.push(label);
localStorage.setItem('label', JSON.stringify(_local));

Ошибка осталась :)

laimas 13.01.2019 21:46

Цитата:

Сообщение от CryNet
Может есть адекватней решение, я не знаю

https://javascript.ru/forum/501957-post5.html , коли дописывать и хранить в массиве.

рони 13.01.2019 22:01

Цитата:

Сообщение от CryNet
Ошибка осталась

Цитата:

Сообщение от CryNet
var label = document.getElementById('setLabel').value;

label есть или нет?

CryNet 13.01.2019 22:14

Цитата:

Сообщение от рони (Сообщение 501966)
label есть или нет?

Есть... я так и не смог понять в чём была ошибка, т.к. и ваш способ не работал, но я переписал участок кода заново и всё заработало. Спасибо


Часовой пояс GMT +3, время: 19:22.