Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как добавить свойство объекта в объект в объекте ? %) (https://javascript.ru/forum/misc/32202-kak-dobavit-svojjstvo-obekta-v-obekt-v-obekte-%25.html)

mitiya 07.10.2012 14:37

как добавить свойство объекта в объект в объекте ? %)
 
пушу функцию для хранения объектов в localStorage .
вот кусок

userOptions = {
	
	set : function (key, value) {
		
		if (!ls.get('userId')) return;
		
		var userId = ls.get('userId');
		
		var opObj = {}
		
		if ($.parseJSON(ls.get('OptionsOfUser-' + userId))) opObj = $.parseJSON(ls.get('OptionsOfUser-' + userId));
		
		opObj[key] = value;
		ls.set('OptionsOfUser-' + userId, $.toJSON(opObj));
	}
}


ls - это объект (не мной написанный) для работы с localStorage, он если нет localStorage пихает данные к кукки. Это так для справки.


Суть проблемы:
если я просто передаю ключ,значение , то все ок, но если я передам ключ,объект , то это объект полностью перезапишет объект в ключе.

постараюсь пояснить
если я сделаю вот так

userOptions.set('positions',{ 'item1' :  '001' });
userOptions.set('positions',{ 'item2' :  '002' });

то на выходе будет
obj = {
    'positions': {'item2' :  '002'}
}

а мне надо
obj = {
    'positions': {'item1' :  '001', 'item2' :  '002'}
}

Maxmaxmахimus 07.10.2012 14:46

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


ну НА КРАЙ для создания иерархии в сторче можно использовать пространства имен (давать ключам особые названия)

Напрмиер

"cats/qq" = 11
"cats/ww" = 22
вот тут становится ясно что и qq и ww лежат в общем контейнере "cats"
с такой организацией таблица будет быстрой (молнеиносной просто) на чтение и на запись каких-то единичных значений. но медленной(не на много так что не стоит пугаться) если мы захотим обработать все значения лежащие в cats, например.

впрочем это просто пример


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