Напишите функцию get(obj, path), которая принимает объект obj и строку path, представляющую путь к вложенному значению в этом объекте. Путь состоит из ключей, разделённых точкой ( . ).

Последовательно проходите ключи пути и проверяйте наличие каждого в текущем объекте. В условии смешаны JavaScript undefined и Python-шаблон; ниже приведены оба согласованных варианта.

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

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

Последовательно проходите ключи пути и проверяйте наличие каждого в текущем объекте. В условии смешаны JavaScript undefined и Python-шаблон; ниже приведены оба согласованных варианта.

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

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

Условие

Напишите функцию get(obj, path), которая принимает объект obj и строку path, представляющую путь к вложенному значению в этом объекте. Путь состоит из ключей, разделённых точкой ( . ).

  • Если путь существует — функция должна вернуть значение, найденное по этому пути.
  • Если путь не существует (на любом уровне вложенности отсутствует нужный ключ, либо промежуточное значение не является объектом) — функция должна вернуть undefined.

Входные данные:

  • obj — произвольный объект с вложенной структурой (ключи — строки, значения — любые типы, включая вложенные объекты)
  • path — строка вида "a.b.c", представляющая путь к значению

Выходные данные: Значение по указанному пути, либо undefined, если путь не найден.

Ограничения:

  • Глубина вложенности от 1 до 10
  • Ключи пути состоят из букв, цифр и _
  • obj может быть пустым объектом

Пример:

# Доступно без импорта: json, sys, io

def get(obj, path):
    # TODO: напишите решение здесь
    return None

Ответ

Последовательно проходите ключи пути и проверяйте наличие каждого в текущем объекте. В условии смешаны JavaScript undefined и Python-шаблон; ниже приведены оба согласованных варианта.

JavaScript с проверкой собственных свойств:

function get(obj, path) {
  let value = obj;
  for (const key of path.split('.')) {
    if (value === null || typeof value !== 'object' ||
        !Object.hasOwn(value, key)) return undefined;
    value = value[key];
  }
  return value;
}

Для Python-словарей и контракта с None вместо отсутствующего значения:

def get(obj, path):
    value = obj
    for key in path.split('.'):
        if not isinstance(value, dict) or key not in value:
            return None
        value = value[key]
    return value

Если требуется отличать отсутствующий ключ от сохранённого None, нужен отдельный sentinel. Сложность O(d) по числу ключей.

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

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

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

Подробнее