Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Html5 local storage (https://javascript.ru/forum/misc/51890-html5-local-storage.html)

spin 24.11.2014 10:50

Html5 local storage
 
var obj = {val: "aaa"};
var test =
{
 o1: obj,
 o2: obj
};
console.log(test.o1==test.o2);

localStorage.test = JSON.stringify(test);
test = JSON.parse(localStorage.test);
console.log(test.o1==test.o2);


закономерно получаем true, false

вопрос:
есть ли способ так засунуть объекты в storage
чтоб было true, true при обратной загрузке
???

Erolast 24.11.2014 11:09

Нет. Объекты сравниваются по ссылкам, а не по строению. Хочешь сравнения по строению - сравнивай JSON-представление.

ksa 24.11.2014 11:11

Цитата:

Сообщение от spin
есть ли способ так засунуть объекты в storage
чтоб было true, true при обратной загрузке

Простой "загрузкой" ты необойдешся... "Вложеный" объект нужно записывать отдельно в сторадж... Потом его читать, ссыку на него присваивать соответствующим элементам материнского объекта.
Только тогда будет тебе true...

ksa 24.11.2014 11:14

Типа такого...

var obj = {val: "aaa"};
var test =
{
 o1: obj,
 o2: obj
};
alert(test.o1==test.o2);

localStorage.test = JSON.stringify(test);
localStorage.test1 = JSON.stringify(obj);
test = JSON.parse(localStorage.test);
obj = JSON.parse(localStorage.test1);
test.o1=obj;
test.o2=obj;
alert(test.o1==test.o2);

spin 24.11.2014 11:33

Цитата:

Сообщение от ksa (Сообщение 342588)
Типа такого...

var obj = {val: "aaa"};
var test =
{
 o1: obj,
 o2: obj
};
alert(test.o1==test.o2);

localStorage.test = JSON.stringify(test);
localStorage.test1 = JSON.stringify(obj);
test = JSON.parse(localStorage.test);
obj = JSON.parse(localStorage.test1);
test.o1=obj;
test.o2=obj;
alert(test.o1==test.o2);

а как быть когда
а) таких ссылок дофига (десятки, может сотни)
ссылки на объекты лежат в двухмерном массиве
б) заранее неизвестно какие именно ячейки ссылаются на один
объект, а какие нет
это всё динамически

рони 24.11.2014 11:41

Цитата:

Сообщение от spin
а как быть когда

Цитата:

Сообщение от Erolast
Хочешь сравнения по строению - сравнивай JSON-представление.

var obj = {val: "aaa"};
var test =
{
 o1: obj,
 o2: obj
};
alert(test.o1==test.o2);

localStorage.test = JSON.stringify(test);
test = JSON.parse(localStorage.test);
alert(JSON.stringify(test.o1)===JSON.stringify(test.o2));

ksa 24.11.2014 11:54

Цитата:

Сообщение от spin
заранее неизвестно какие именно ячейки ссылаются на один
объект, а какие нет

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

spin 24.11.2014 11:58

Цитата:

Сообщение от ksa (Сообщение 342594)
Тогда стоит первым делом определиться нужны ли тебе сравнения именно ссылок на объекты...
Может тебе хватит сравнения по советам выше?

дело не столько в сравнении
нужна возможность когда изменил объект
и изменилось содержимое ячеек которые на него ссылаются

Erolast 24.11.2014 12:47

Тогда вариант ksa.
Цитата:

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

ksa 24.11.2014 13:35

Цитата:

Сообщение от spin
нужна возможность когда изменил объект
и изменилось содержимое ячеек которые на него ссылаются

Тогда нужны сравнения вовремя записи... Хранить "одинаковое" отдельно, потом как-то прописывать - де это вон то, ранее сохраненное...
При чтении различать, что это значение - отдельно сохраненный объект, его нужно еще прочитать и переприсвоить...


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