Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить доступ к элементу объекта по "динамической цепочке" (https://javascript.ru/forum/misc/31628-kak-poluchit-dostup-k-ehlementu-obekta-po-dinamicheskojj-cepochke.html)

kaf 14.09.2012 23:32

Как получить доступ к элементу объекта по "динамической цепочке"
 
Есть объект obj
Есть массив переменной длины [k1,k2,...,kn], где ki - строка или число
Известно, что obj[k1][k2]...[kn] существует
Как в общем случае выполнить obj[k1][k2]...[kn]=val ?
Пока делаю это через eval, но, возможно, есть более простое решение.

melky 14.09.2012 23:43

перекопировать из массива в объект, что ли?
var obj = {};

var k = [ 'k1', 'k2', 3, 4 ];

for (var i = 0; i < k.length; i++) {
    obj[i] = k[i];
}

kaf 14.09.2012 23:49

Нет.
Здесь что-то вроде n-мерного объекта. Если по текущему примеру, то obj.k1.k2[3][4]=val
Но в общем случае n не фиксировано.

oneguy 15.09.2012 01:24

Можно сделать так:
var tempObj=obj;
for (var i=0; i<arr.length-1; i++)
  tempObj=tempObj[arr[i]];
tempObj[arr[i]]=val;

kaf 15.09.2012 10:06

oneguy, спасибо, работает.
P.S. Изначально пробовал похожую логику, но, видимо, в чем-то ошибся, т.к. не сработало (исходников, к сожалению, не осталось)


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