Разбейте путь по точкам и последовательно переходите по собственным свойствам, возвращая undefined при отсутствии участка.
Необходимо написать метод для получения значения по ключу объекта с неограниченной вложенностью и сигнатурой
Разбейте путь по точкам и последовательно переходите по собственным свойствам, возвращая undefined при отсутствии участка.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать метод для получения значения по ключу объекта с неограниченной вложенностью и сигнатурой
get(path: string, data: Record<string, unknown>): unknown const data = { user: { profile: { name: 'Имя' } } } get('user.profile.name', data)
Ответ
Разбейте путь по точкам и последовательно переходите по собственным свойствам, возвращая undefined при отсутствии участка.
Здесь точка — разделитель, пустой путь возвращает исходный объект. Ключи с точками требуют другого контракта; обход прототипа запрещён.
function get(path: string, data: Record<string, unknown>): unknown {
if (path === '') return data;
let current: unknown = data;
for (const key of path.split('.')) {
if (current === null || typeof current !== 'object' ||
!Object.prototype.hasOwnProperty.call(current, key)) return undefined;
current = (current as Record<string, unknown>)[key];
}
return current;
}
Итеративный обход не расходует стек на глубину пути. Код рассчитан на обычные данные; чтение getter или Proxy может иметь побочный эффект.