Последовательно проходите ключи пути и проверяйте наличие каждого в текущем объекте. В условии смешаны JavaScript undefined и Python-шаблон; ниже приведены оба согласованных варианта.
Напишите функцию get(obj, path), которая принимает объект obj и строку path, представляющую путь к вложенному значению в этом объекте. Путь состоит из ключей, разделённых точкой ( . ).
Последовательно проходите ключи пути и проверяйте наличие каждого в текущем объекте. В условии смешаны 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) по числу ключей.