Доступ к динамическому c вложенному ключу в JS объекте - PullRequest
1 голос
/ 18 января 2020

У меня есть массив типа ['animals', 'cats', 'cute', 'fast', 'small', ...], и я хочу получить доступ к вложенным ключам объекта, например

let object = {
  one: {
    two: {
      three: {
        // and so on
      }
    }
  }
}

Обычно я пишу object['animals']['cats']['cute']['fast']['small']..

Проблема заключается в том, что ключи и количество уровней является динамическим c (так что я могу получить объекты с 2-мя вложенными уровнями или 50), поэтому я понятия не имею, как это можно сделать

Заранее благодарен за любую помощь

1 Ответ

3 голосов
/ 18 января 2020

Перебирать массив ключей с помощью .reduce, где аккумулятором является текущий вложенный объект:

let object = {
  one: {
    two: {
      three: {
        prop: 'val'
      }
    }
  }
};

const props = ['one', 'two', 'three', 'prop'];
const nestedVal = props.reduce((a, prop) => a[prop], object);
console.log(nestedVal);

Чтобы присвоить значение в той же точке, сначала откройте последний ключ, используйте тот же трюк reduce, чтобы добраться до последнего объекта, и назначьте свойству на последнем ключе в скобках:

let object = {
  one: {
    two: {
      three: {
        prop: 'val'
      }
    }
  }
};

const props = ['one', 'two', 'three', 'prop'];
const lastKey = props.pop();
const nestedObj = props.reduce((a, prop) => a[prop], object);
nestedObj[lastKey] = 'newVal';
console.log(object);
...