Моя проблема

Рассмотрим вложенный объект:

> { a: { b: { c: 3 } } }
{ a: { b: { c: 3 } } }

Доступ к внутреннему свойству с точечной нотацией для фиксированных значений осуществляется с использованием точечной нотации:

> x.a.b.c
3

Я хотел бы получить доступ к произвольному свойству в зависимости от некоторого условия, например, вместо доступа к b я хотел бы получить доступ к свойству, имя которого хранится в переменной SOME_VARIABLE:

> x.a.{SOME_VARIABLE}.c
3

Что я пробовал

  • STFW . Наверное, не знаю точной терминологии.

Мой вопрос

Как я могу динамически ссылаться на свойство объекта с именем свойства, определенным в переменной?

0
Adam Matan 24 Сен 2018 в 09:08

2 ответа

Лучший ответ

Есть несколько способов доступа к объекту, один из которых - [] вместо точек, если объект - var object = { inside : '1' }, вы можете получить к нему доступ следующим образом: object['inside']. Не забудьте передать кавычки внутри, если он статический, а если он динамический, передайте переменную

Я добавил пример ниже

var a = { b: { c: 1 } };

var d = 'b';

console.log(a[d]['c']);
1
Atishay Jain 24 Сен 2018 в 06:24

Вы также можете рассмотреть возможность использования такой библиотеки, как lodash, которая предоставляет функции для «проникновения внутрь» сложного объекта и возврата значения, Если путь не существует, значение по умолчанию.

Примере:

const _ = require('lodash')

const target = {
  foo: {
    bar: {
      baz: [1, 2, 3]
    }
  }
}

console.log(_.get(target, 'foo.bar.baz.1')) // ==> 2

console.log(_.get(target, 'foo.3.bar', 'DEFAULT')) // ==> DEFAULT

if (_.has(target, 'foo.bar')) {
  // do something interesting
}

const newKey = 'blorg'

_.put(target, `foo.bar.${newKey}`, 'hello?')

/*
  target is now {
    foo: {
      bar: {
        baz: [1, 2, 3]
      },
      blorg: 'hello?'
    }
  }
*/
1
Rob Raisch 24 Сен 2018 в 23:38