Предположим, что функция foo
с двумя параметрами:
obj
- объект
arr
- массив строк
члены arr
являются именами свойств в obj
, например obj[arr[0]][arr[1]]
имеет значение, если arr
имеет не менее 2 членов.
Как получить значение свойства в obj
, который arr
указывает на?
Примечание: obj
набирается, и старая школьная итерация вызывает ошибку.
Пример: obj
может быть
{
pro1: 'a',
prop2: {
prop21: 'b',
prop22: ['c', 'd']
}
}
и arr
может быть
['prop2', 'prop21']
У меня нет никакой информации об obj
и arr
, я просто знаю
obj['prop2']['prop21']
конечно, имеет значение, и эта фраза не вызывает эту ошибку:
не может прочитать свойство prop21 неопределенного
Если я правильно понимаю вас:
let obj = {
pro1: "a",
prop2: {
prop21: "b",
prop22: ["c", "d"]
}
};
function getValue(obj: any, keys: string[]): any {
let index = 0,
current: any = obj;
while (current[keys[index]]) {
current = current[keys[index++]];
}
return current;
}
console.log(getValue(obj, ["prop2", "prop21"])); // b
console.log(getValue(obj, ["prop2", "prop22"])); // ["c", "d"]