Доступ к вложенному свойству по пути - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь получить доступ к вложенным свойствам объекта из строки.

Вот мой пример кода:

var obj = {
  'text': 'hello',
  'foo': {
    'float': 0.5,
    'bar': {
      'id': 42
    }
  }
};

var keyOne = 'text';
var keyTwo = 'foo.float';
var keyThree = 'foo.bar.id';

console.log(obj[keyOne]); // successfully log 'hello'
console.log(obj[keyTwo]); // trying to log '0.5'
console.log(obj[keyThree]); // trying to log '42'

Я пытаюсь сделать это в JS, ноУ меня также есть готовый jQuery для более чистого решения.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Для этого вам придется немного пройтись.

Разделить путь на ., затем Array.reduce надчасти с каждой итерацией обращаются к свойству, к которому оно обращается, через метод доступа к скобкам .

В конце концов вы достигнете значения, которое вы ищете.

var obj = {
  'text': 'hello',
  'foo': {
    'float': 0.5,
    'bar': {
      'id': 42,
      'baz': [{ name: 'Mary' }, { name: 'Jane' }]
    }
  }
};

var getValueByPath = (obj, path) =>
  path.split('.').reduce((acc, part) => acc ? acc[part] : undefined, obj);

var keyOne = 'text';
var keyTwo = 'foo.float';
var keyThree = 'foo.bar.id';
var keyFour = 'foo.bar.baz.1.name';

console.log(getValueByPath(obj, keyOne));
console.log(getValueByPath(obj, keyTwo));
console.log(getValueByPath(obj, keyThree));
console.log(getValueByPath(obj, keyFour));
0 голосов
/ 05 февраля 2019

Что не так с таким доступом?есть ли причина, по которой вам нужно определять ключи в переменных?

Надеюсь, это поможет:)

var obj = {
  text: 'hello',
  foo: {
    float: 0.5,
    bar: {
      id: 42,
    },
  },
};

console.log(obj.text);
console.log(obj.foo.float);
console.log(obj.foo.bar.id);
...