У меня были проблемы с людьми, которые спешат с выводами о том, что мне нужно здесь, поэтому, пожалуйста, прочитайте это и подумайте, прежде чем ответить.
Вот случай:
У вас естьвходящий объект.Вы не знаете структуру этого объекта.Однако у вас есть «цель» для чего-то в объекте.Итак, давайте представим, что есть myObject
, и у вас есть какая-то цель, определенная как массив уровней ассоциации:
var objectTarget = [ 'firstLevel', 'secondLevel' ,'targetProperty' ];
Теперь входящий myObject
выглядит следующим образом:
{
firstLevel: {
secondLevel: {
targetProperty: "The goods!"
}
}
}
Но, как было сказано ранее, вы не знаете структуру.Все, что вы знаете, это то, что находится в массиве objectTarget
.
Моя проблема в том, что я могу адресовать произвольное местоположение в пределах объекта, основываясь исключительно на цели.Если бы я знал, что цель будет всегда глубиной в три уровня, то я мог бы просто сослаться на это так:
myObject[objectTarget[1]][objectTarget[2]][objectTarget[3]];
Однако, поскольку я не могу быть уверен в количестве глубины уровняэто не адекватно.Единственный способ, которым я смог выполнить эту задачу, - выбрать максимальное количество разумных уровней, а затем включить его.Вот так:
switch ( objectTarget.length) {
case 1:
var result = myObject[objectTarget[1]];
break;
case 2:
var result = myObject[objectTarget[1]][objectTarget[2]];
break;
case 3:
var result = myObject[objectTarget[1]][objectTarget[2]][objectTarget[3]];
break;
case 4:
var result = myObject[objectTarget[1]][objectTarget[2]][objectTarget[3]][objectTarget[1]];
break;
}
.. и т. Д.
Это, очевидно, очень грязное и не оптимальное решение.
Правильно ли это объясняет мою проблему?Есть ли более чистые способы для достижения этой цели?
Заранее благодарим вас за любые советы, которые вы можете дать.