Получить значение из объекта по указанному в виде строки пути
Собственно, есть путь (может быть разной вложенности), указанный в формате строки, например такой:
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, время: 17:20. |