Как получить значения доступа к объекту программно

0

Предположим, что функция foo с двумя параметрами:

  1. obj - объект

  2. 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 неопределенного

  • 2
    Можете ли вы привести лучший пример того, что вы просите?
  • 0
    приведите его к любому тогда: arr.reduce ((a, b) => a [b], obj как любой)
Показать ещё 1 комментарий
Теги:

1 ответ

0

Если я правильно понимаю вас:

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"]

(код на детской площадке)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню