@mulyar01

Как перейти из строки в обьект?

Есть строка вида:
let string = 'object.method.method'
И есть обьект соответствующий этому выражению
const object = {
     method: {
          method:  () => console.log('123123')
    }
}

Каким образом это реализовать?
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 1
@justmavi
Software Development Engineer at Softconstruct
Достать значение свойства объекта по пути можно через метод get из lodash. Но конкретно в данном случае есть проблемы.

Если глобальный скоп, то с использованием var вместо let & const можно быстро решить.

var object = {
     method: {
          method:  () => console.log('123123')
    }
}

let string = 'object.method.method'
const method = _.get(window, string);


Подробнее о get - https://lodash.com/docs/4.17.15#get

Если локальный скоп, то можно сохранить созданный объект в this и потом через него обращаться:

function fn() {
  const object = {
       method: {
            method:  () => console.log('123123')
      }
  }

  this.object = object;

  let string = 'object.method.method'
  const method = _.get(this, string);
}


Если lodash не хочется юзать, то вот код:

function getNestedValue(object, path) {
    path = path.replace(/\[(\w+)\]/g, '.$1'); // конвертация индексов в свойства
    path = path.replace(/^\./, '');           // удаление лишних точек
    
    const parts = path.split('.');
    
    for (const key of parts) {
        if (typeof object === 'object' && !(key in object)) return;
        
        object = object[key];
    }
    
    return object;
}

console.log(getNestedValue(window, 'object.method.method'));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы