localStorage - добавить объект в массив объектов - PullRequest
4 голосов
/ 29 августа 2011

Я пытаюсь локально сохранить объект в массиве внутри объекта.

Если я попробую следующее в моей консоли, оно будет отлично работать:

theObject = {}
theObject.theArray = []
arrayObj = {"One":"111"}
theObject.theArray.push(arrayObj)

Однако, если я делаю то, что считаю эквивалентным, за исключением сохранения результата в localStorage, он терпит неудачу:

localStorage.localObj = {}
localStorage.localObj.localArray = []
stringArrayObj = JSON.stringify(arrayObj)
localStorage.localObj.localArray.push(stringArrayObj)

Я получаю следующую ошибку ...

localStorage.localObj.localArray.push(stringArrayObj)
TypeError
arguments: Array[2]
message: "—"
stack: "—"
type: "non_object_property_call"
__proto__: Error

Есть идеи, как мне заставить это работать?

Приветствия

Ответы [ 2 ]

10 голосов
/ 29 августа 2011

Вы можете хранить только строки в localStorage. Вам необходимо JSON-кодировать объект, а затем сохранить полученную строку в localStorage. Когда ваше приложение запускается, JSON-декодирует значение, которое вы сохранили в localStorage.

localObj = {}
localObj.localArray = []
localObj.localArray.push(arrayObj)

localStorage.localObj = JSON.stringify(localObj);
...
localObj = JSON.parse(localStorage.localObj);
2 голосов
/ 29 августа 2011

LocalStorage может хранить только пары ключ-значение, где ключ это строка, а значение тоже строка.Вы можете сериализовать всю иерархию объектов в JSON и сохранить ее как элемент localStorage.

Согласно источникам V8 (я предполагаю, что вы используете Google Chrome, но надеюсь, что это не отличается для других движков JS) TypeError с сообщением 'non_object_property_call'происходит, чем вызванный метод для неопределенного или нулевого значения.

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