Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.06.2019, 14:41
Новичок на форуме
Отправить личное сообщение для ULTIMITE Посмотреть профиль Найти все сообщения от ULTIMITE
 
Регистрация: 18.04.2017
Сообщений: 5

Получить значение из объекта по указанному в виде строки пути
Собственно, есть путь (может быть разной вложенности), указанный в формате строки, например такой:
let path = 'array[elementNumber].array2[elementNumber2].objectName.propertyName';


Задача, получить значение, указанное по указанному пути, не применяя eval. Пробовал через split('.') и reduce(), но если в пути указан элемент массива - способ не работает. Как можно решить задачу?

Последний раз редактировалось ULTIMITE, 28.06.2019 в 15:33.
Ответить с цитированием
  #2 (permalink)  
Старый 28.06.2019, 16:11
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,787

Напишите какой в итоге должен получиться путь?
Какой-то кривой путь у вас...
Ответить с цитированием
  #3 (permalink)  
Старый 28.06.2019, 17:55
Новичок на форуме
Отправить личное сообщение для ULTIMITE Посмотреть профиль Найти все сообщения от ULTIMITE
 
Регистрация: 18.04.2017
Сообщений: 5

Сообщение от Nexus
Напишите какой в итоге должен получиться путь?
Какой-то кривой путь у вас...
В том то и дело, что путь может быть в теории любым, и надо как-то по нему извлекать значения. Например, написать для этого функцию, в неё помимо строки пути передавать объект, и уже от него исходить, пытаясь по этому пути что-нибудь достать. Типа:
const extractValueByPath = (path, obj) => {
   // Код, извлекающий значение
}
Ответить с цитированием
  #4 (permalink)  
Старый 28.06.2019, 21:18
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

https://lodash.com/docs/4.17.11#get
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2019, 18:55
Новичок на форуме
Отправить личное сообщение для ULTIMITE Посмотреть профиль Найти все сообщения от ULTIMITE
 
Регистрация: 18.04.2017
Сообщений: 5

destus,
А без сторонних библиотек?
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2019, 19:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от ULTIMITE
А без сторонних библиотек?
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);

Последний раз редактировалось рони, 01.07.2019 в 20:21.
Ответить с цитированием
  #7 (permalink)  
Старый 02.07.2019, 01:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,563

ULTIMITE, идёте на гитхаб и смотрите как это сделано в lodash или какой иной библиотеке. Это лучший способ избежать внезапных граблей.
Например вариант рони завалится на таком: object["bracketsIn[Name]"].
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить значение Object mazahaler Events/DOM/Window 3 05.01.2018 12:12
Как получить значение инпута vano_mig Events/DOM/Window 6 22.09.2017 00:57
как получить значение псевдокласса :valid/:invalid ? persikova Events/DOM/Window 6 14.07.2017 10:09
Получить значение value - как ? lamer Общие вопросы Javascript 26 12.08.2012 10:33
Не могу получить значение атрибута DenQ jQuery 9 06.02.2011 14:33