Когда пользователь начал что-то менять, но передумал — важно вернуть всё как было. Это снижает число ошибок и облегчает работу с формами.
В этой задаче:
• Сохраним начальные данные при загрузке.
• Сравним текущие значения с изначальными.
• Добавим кнопку отката и логику обновления.
• Сделаем реализацию универсальной и лаконичной.
Конечный результат — готовый механизм сброса, который легко встроить в профиль, настройки или любую редактируемую форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍10🔥8
👍11🔥8❤6
This media is not supported in your browser
VIEW IN TELEGRAM
LearnJS — русскоязычный учебник, от базовых понятий до продвинутых тем чтобы освоить JS!
Удобные объяснения, примеры кода, интерактивные задания помогут прокачать навыки как новичкам, так и опытным разработчикам.
📌 Оставляю ссылочку: learnjs.ru
📣 JS Ready | #сайт
Удобные объяснения, примеры кода, интерактивные задания помогут прокачать навыки как новичкам, так и опытным разработчикам.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤10🔥5🤝2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥10❤8🤝3
Группировка данных по ключу!
При работе с табличными данными, API-ответами или логами часто нужно группировать записи по определённому признаку — роли, категории, дате.
Исходный массив объектов — типичный кейс из API:
📣 JS Ready | #практика
При работе с табличными данными, API-ответами или логами часто нужно группировать записи по определённому признаку — роли, категории, дате.
Исходный массив объектов — типичный кейс из API:
const users = [
{ name: "Alice", role: "admin" },
{ name: "Bob", role: "user" },
{ name: "Eve", role: "admin" },
];
Используем reduce как агрегатор. В одну строку — и читаемо, и производительно:
const grouped = users.reduce((acc, u) => {
(acc[u.role] ||= []).push(u);
return acc;
}, {});
Теперь grouped.admin и grouped.user содержат списки пользователей по ролям. Получить нужную подгруппу — просто:
console.log(grouped["user"]); // [{ name: "Bob", role: "user" }]
🔥 Такой приём универсален для списков любых сущностей — от заказов до логов, и легко адаптируется под бизнес-логику.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤8🔥6🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
От сортировок и форматирования даты до уникальных хаков с массивами и объектами — всё в одном месте. Подходит как шпаргалка и как источник решений для повседневных задач. Каждый сниппет объяснён и готов к применению.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥6
Сегодня создадим минималистичный стор — простой инструмент для хранения состояния с подписками, который позволяет автоматически реагировать на изменения данных.
В этом посте:
• Напишем методы get, set и subscribe для работы с состоянием.
• Реализуем механизм подписки и отписки от обновлений.
• Свяжем стор с обновлением DOM для динамического интерфейса.
Этот навык — отличный фундамент для понимания работы популярных фреймворков и построения собственных реактивных приложений с нуля.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤9👍5
This media is not supported in your browser
VIEW IN TELEGRAM
JavaScript info — целый учебник по современному JavaScript. От основ до глубинных тем вроде области видимости, классов и прототипов.
📌 Оставляю ссылочку: javascript.info
📣 JS Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍9🤝8
Своя система событий (EventBus) на ООП!
Создаём базу для общения компонентов в приложении. Начнем с простого класса:
Теперь добавим метод
Далее
Проверим, как это работает на практике:
🔥 Мини-фреймворк готов! Теперь ты можешь строить масштабируемые интерфейсы с чистой архитектурой.
📣 JS Ready | #практика
Создаём базу для общения компонентов в приложении. Начнем с простого класса:
class EventBus {
constructor() {
this.events = {};
}
}Теперь добавим метод
.on() — подписка на событие:on(event, cb) {
(this.events[event] ||= []).push(cb);
}Далее
.emit() — запуск всех подписчиков:emit(event, data) {
(this.events[event] || []).forEach(cb => cb(data));
}Проверим, как это работает на практике:
const bus = new EventBus();
bus.on('ping', msg => console.log('Получено:', msg));
bus.emit('ping', 'Привет!');
🔥 Мини-фреймворк готов! Теперь ты можешь строить масштабируемые интерфейсы с чистой архитектурой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥7🤝5
This media is not supported in your browser
VIEW IN TELEGRAM
JSDares — это игровая платформа с открытым исходным кодом, где вы получаете задания от сообщества, которые вам нужно решить.
📌 Оставляю ссылочку: jsdares.com
📣 JS Ready | #игра
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥7❤4🤝1
В этом посте ты разработаешь интерактивный конструктор суши с визуальным стеком и автоматическим подсчётом цены.
Сегодня рассмотрим:
• Добавление ингредиентов по клику.
• Обновление визуального стека.
• Подсчёт итоговой цены в реальном времени.
• Гибкая архитектура.
Подходит для: меню доставки, геймификации, e-commerce-интерфейсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤8👍8👎2🤝1