Вход

Просмотр полной версии : Как получить доступ к элементу объекта по "динамической цепочке"


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. Изначально пробовал похожую логику, но, видимо, в чем-то ошибся, т.к. не сработало (исходников, к сожалению, не осталось)