Сегодня у нас очередная задача с собеседования, связанная с рекурсией)
Задача:
Нужно распарсить вложенный объект, чтобы получить значение самого глубокого уровня.
Пример вызова функции:
Решение:
1.
2. Берём первое значение —
3. Если это значение — не объект, возвращаем его.
4. Если это объект, вызываем
Для кого-то эта задача может показаться совсем простой, но на практике некоторые мидлы задумываются над ней.
#interview #JavaScript
Задача:
Нужно распарсить вложенный объект, чтобы получить значение самого глубокого уровня.
Пример вызова функции:
const obj = { red: { fast: { fancy: { car: "lamba" } } } };
console.log(objParse(obj)); // "lamba"
Решение:
function objParse(obj) {
const [value] = Object.values(obj); // 1, 2
if (typeof value !== "object") { // 3
return value;
}
return objParse(value); // 4
}
1.
Object.values(obj) возвращает массив всех значений объекта. 2. Берём первое значение —
value.3. Если это значение — не объект, возвращаем его.
4. Если это объект, вызываем
objParse рекурсивно.Для кого-то эта задача может показаться совсем простой, но на практике некоторые мидлы задумываются над ней.
#interview #JavaScript
🔥9👍4
Недавно мы разбирали(тык) работу с ошибками в JS.
Сегодня рассмотрим создание кастомных ошибок. Они позволяют точнее описывать, что именно пошло не так, и обрабатывать ошибки более точечно.
Вместо обычного
Что происходит?
1. Мы наследуемся от встроенного
2. Функция
3. В блоке
4. В блоке
Зачем это нужно?
1. Проще различать типы ошибок
2. Можно точечно обрабатывать нужные ошибки с помощью
3. Можно сделать более детальные ошибки.
#JavaScript #BestPractices
Сегодня рассмотрим создание кастомных ошибок. Они позволяют точнее описывать, что именно пошло не так, и обрабатывать ошибки более точечно.
Вместо обычного
Error можно создать свой класс, унаследованный от него:
class ValidationError extends Error { // 1
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
function validateUser(user) { // 2
if (!user.name) {
throw new ValidationError("Поле 'name' обязательно");
}
}
try {
validateUser({}); // 3
} catch (error) {
if (error instanceof ValidationError) { // 4
console.error("Ошибка валидации:", error.message);
} else {
throw error;
}
}
Что происходит?
1. Мы наследуемся от встроенного
Error, чтобы определить новый тип ошибки — ValidationError.2. Функция
validateUser проверяет, есть ли у объекта поле name. Если его нет — выбрасывает кастомную ошибку ValidationError с понятным сообщением.3. В блоке
try вызываем validateUser, передавая объект без name.4. В блоке
catch ловим ошибку и проверяем, является ли она экземпляром ValidationError с помощью instanceof.Зачем это нужно?
1. Проще различать типы ошибок
2. Можно точечно обрабатывать нужные ошибки с помощью
instanceof.3. Можно сделать более детальные ошибки.
#JavaScript #BestPractices
👍11🔥3👏1