Получение значения вложенного свойства по строковому пути

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

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

<script>
function getProp(obj, path) {
  //code...
}

const obj = {
  a: {
    b: 10,
    c: {
      d: {}
    }
  }
};

getProp(obj, 'a.b');        // => 10
getProp(obj, 'a.c.d');      // => {}
getProp(obj, 'a.c.z.f.s');  // => undefined
</script>

Ответ

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

function getProp(obj, path) {
  if (typeof path !== 'string' || path === '') return undefined;
  let current = obj;
  for (const key of path.split('.')) {
    if (current == null || !Object.prototype.hasOwnProperty.call(current, key)) return undefined;
    current = current[key];
  }
  return current;
}

Ноль, false и пустая строка не считаются отсутствующими. Имена ключей с точкой и bracket-нотация здесь не поддерживаются. Чтение getter может выполнить код, поэтому это не sandbox для произвольных объектов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее