True Frontender
1K subscribers
145 photos
7 videos
89 links
Сборная солянка про фронтенд.

JavaScript, React, TypeScript, HTML, CSS — здесь обсуждаем всё, что связано с веб-разработкой!

Связь: @pmowq
Download Telegram
Сегодня у нас очередная задача с собеседования, связанная с рекурсией)

Задача:
Нужно распарсить вложенный объект, чтобы получить значение самого глубокого уровня.

Пример вызова функции:

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.
Сегодня рассмотрим создание кастомных ошибок. Они позволяют точнее описывать, что именно пошло не так, и обрабатывать ошибки более точечно.

Вместо обычного 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