Получить значение из объекта по указанному в виде строки пути
Собственно, есть путь (может быть разной вложенности), указанный в формате строки, например такой:
let path = 'array[elementNumber].array2[elementNumber2].objectName.propertyName'; Задача, получить значение, указанное по указанному пути, не применяя eval. Пробовал через split('.') и reduce(), но если в пути указан элемент массива - способ не работает. Как можно решить задачу? |
Напишите какой в итоге должен получиться путь?
Какой-то кривой путь у вас... |
Цитата:
const extractValueByPath = (path, obj) => {
// Код, извлекающий значение
}
|
|
destus,
А без сторонних библиотек? |
Цитата:
let obj = {array : [0,0, {array2 : [1,2,{objectName : {propertyName : "test" }}]}]}
let path = 'array[2].array2[2].objectName.propertyName';
let test = path.split(".").reduce((ob, key, index) => {
[key, index] = key.match(/[^\[\]]+/g);
return (index === void 0) ? ob[key] : ob[key][index]
}, obj)
alert(test);
|
ULTIMITE, идёте на гитхаб и смотрите как это сделано в lodash или какой иной библиотеке. Это лучший способ избежать внезапных граблей.
Например вариант рони завалится на таком: object["bracketsIn[Name]"]. |
| Часовой пояс GMT +3, время: 10:19. |