Как сохранить путь к объекту - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь сохранить путь к объекту в переменной. Но не работает. кто-нибудь, помогите мне, пожалуйста?

вот моя попытка:

var object = {"india": { "chennai" : {"sholing":"hi"}}};

var path = ['india']['chennai']['sholing'];

console.log( object.india.chennai ); //works

console.log( object[path] ); //not works

Live Demo

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

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

const getValue = (object, path) => path.reduce((r, k) => (r || {})[k], object);

var object = { india: { chennai: { sholing: "hi" } } },
    path = ['india', 'chennai', 'sholing'];

console.log(object.india.chennai );
console.log(getValue(object, path));
0 голосов
/ 01 мая 2018

Вы должны ссылаться на каждое свойство в скобках. Таким образом, object[path] не будет работать (как указывал @Crazy Train, ваша отладка должна была показать, что ваш var path = ... выдает ошибку), но если у вас есть массив путей, таких как let path = ['india', 'chennai', 'sholing'], вы можете использовать их чтобы получить доступ к глубокому свойству, как object[path[0]][path[1]][path[2]].

Вам, вероятно, гораздо лучше использовать вспомогательный инструмент, чтобы сделать это для вас, например, toPath и get функций Lodash:

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// => 3

_.get(object, ['a', '0', 'b', 'c']);
// => 3

_.get(object, 'a.b.c', 'default');
// => 'default'

См. Другие ответы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...