1. var tab = {
  2. 'michal':{klasa:6,opis:{wzrost:189,waga:86}},
  3. 'magda':{klasa:6,opis:{wzrost:190,waga:86}},
  4. 'maciek':{klasa:6,opis:{wzrost:189,waga:86}},
  5. 'marcin':{klasa:6,opis:{wzrost:189,waga:86}}
  6. };
  7.  
  8. function update(id,key,value){
  9. var data = JSON.parse(localStorage.getItem(id));
  10. data[key] = value;
  11. localStorage.setItem(id,JSON.stringify(data));
  12. };

jeżeli chciałbym wymienić całą gałąź 'michal':
  1. var name = 'michal';
  2. var newdata = {klasa:5,opis:{wzrost:100,waga:100}};
  3. update(tab,name,newdata);

i to działa w 100%
problem pojawia się gdy chce wymienić tylko dalszą gałąź:
czyli tylko dane opisu 'michal.opis':
  1. var name = 'michal';
  2. var newdata = {wzrost:100,waga:100};
  3. update(tab,name.opis,newdata);

zamiast zmodyfikować michal.opis tworzy mi nowa gałąź ->"undefined":{wzrost:100,waga:100}.

Jeżeli zrobię tak:(prześle key jako STRING):
  1. var name = 'michal';
  2. var newdata = {wzrost:100,waga:100};
  3. update(tab,'name.opis',newdata);

tworzy mi nowa gałąź: ->"name.opis":{wzrost:100,waga:100}.

Coś jest nie tak z przesłaniem zmiennej 'key', nie wiem jak to poprawić. Problem tkwi w mojej niewiedzy na temat drzew JSON, nie potrafię go rozwiązać.
Jak zmodyfikować funkcje update żeby móc zmieniać dalsze gałęzie ?

-----------------------------------------------------------------------------------------------------

Dla potomnych.

Rozwiązałem swój problem. Funkcja dalej jest niedoskonała, ale pozwala modyfikować o 1 gałąź dalej.
Jedynym rozwiązaniem jest dodanie pętli for() z -> key.length żeby sprawdzić ile index'ów jeszcze mamy. Czego nie chce robić exclamation.gif

  1. function update(id,key,value){
  2. if(localStorage.getItem(id)){
  3. var data = JSON.parse(localStorage.getItem(id));
  4. if(key.indexOf('.')>= 0){
  5. key = key.split('.');
  6. data[eval(key[0])][key[1]] = value;
  7. }else{ data[key] = value;}
  8. localStorage.setItem(id,JSON.stringify(data));
  9. }
  10. }