#read_watch #react #angular #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥1
Когда нужно отсортировать массив объектов сразу по нескольким полям — вместо вложенных if можно сделать так:
const sortBy = (arr, keys) => [...arr].sort((a, b) =>
keys.reduce((res, k) => res || (a[k] > b[k] ? 1 : a[k] < b[k] ? -1 : 0), 0)
);
Где пригодится:
#readme #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🌚3🔥2❤1
Посмотрите на код (он в картинке
Какой ответ выведет консоль
Объясните, почему вывод именно такой. Почините код, чтобы выводилось корректное значение счётчика.
Подсказка:
Ответ в комментах скрывайте под спойлер
#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱4
История Prerender — как простой сервис для индексации JS-сайтов вырос в SaaS с органическим ростом и стабильной выручкой.
Обзор книги Милесии МакГрегор: переход от middle к senior, работа с legacy, архитектурные решения в NestJS и React, DevOps-подходы и важность soft-skills.
Перевод статьи о том, как работает реактивная библиотека без виртуального DOM: сигналы, эффекты, прокси-хранилища и ловушки вроде деструктуризации пропсов.
#read_watch #js #react
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3
Когда обработчик срабатывает слишком часто (scroll, resize, mousemove) — он грузит браузер и рендер.
— Индикатор прогресса при скролле;
— Drag&drop;
— Частые API-запросы (real-time).
#readme #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Раннее мы выкладывали задачу
Правильный ответ: NaN
— В setTimeout обычная функция → её this указывает на window (или undefined в strict).
— У глобального объекта нет count.
— undefined++ → NaN.
function Counter() {
this.count = 0;
this.start = function() {
setTimeout(() => {
this.count++;
console.log(this.count);
}, 1000);
}
}
#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3❤2
🧩 Задача на понимание устройства JS
В цикле навешиваются обработчики на элементы списка.
Однако при клике на любой пункт в консоль выводится одно и то же число🤔
❓ Как исправить поведение, чтобы при клике выводился правильный индекс элемента:
❤️ — Заменить var i на let i
🔥 — Заменить стрелочную функцию на обычную
⚡️— Перед циклом сделать i = 0;
🐸 Библиотека фронтендера
#code_challenge #js
В цикле навешиваются обработчики на элементы списка.
Однако при клике на любой пункт в консоль выводится одно и то же число
❤️ — Заменить var i на let i
🔥 — Заменить стрелочную функцию на обычную
⚡️— Перед циклом сделать i = 0;
#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤49⚡1🔥1
Кажется, что это просто поиск элемента на странице — но под капотом браузер делает куда больше.
Он использует готовые структуры DOM и CSSOM, разбирает селектор в токены и выполняет оптимизированный поиск с кешами и хеш-таблицами.
#under_hood #js
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🥰3❤2👍1
Пошаговое руководство по симуляции солнца, дождя, снега и грозы в интерактивном трехмерном приложении для прогноза погоды.
Автор показывает, что за красивым синтаксисом скрываются подводные камни специфичности и неожиданные баги, из-за которых старые добрые keyframes по-прежнему оказываются надёжнее.
#read_watch #react #js #ts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Палиндром — это слово или фраза, которые читаются одинаково в обе стороны:
level, madam, А роза упала на лапу Азора.
const isPalindrome = str =>
(s = str.toLowerCase().replace(/[^a-zа-яё0-9]/gi, '')) === [...s].reverse().join('');
• toLowerCase()
— приводит строку к одному регистру.• replace(/[^a-zа-яё0-9]/gi, '')
— убирает все символы, кроме букв и цифр.• [...s].reverse().join('')
— переворачивает строку.• Сравниваем оригинал и перевёрнутую версию.
function isPalindrome(str) {
const s = str.toLowerCase().replace(/[^a-zа-яё0-9]/gi, '');
for (let i = 0, j = s.length - 1; i < j; i++, j--) {
if (s[i] !== s[j]) return false;
}
return true;
}
#readme #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🥱2👍1🔥1
🧩 Задача на область видимости
При запуске кода в консоли —
❓ Почему, если ветка `if (false)` даже не выполняется:
❤️ — Переменная
🔥 —
⚡️ — Ошибка синтаксиса при объявлении
🐸 Библиотека фронтендера
#code_challenge #js
При запуске кода в консоли —
ReferenceError
.❤️ — Переменная
a
находится во временной мёртвой зоне (TDZ)🔥 —
let
внутри блока не создаёт TDZ⚡️ — Ошибка синтаксиса при объявлении
#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11⚡3🔥2
— Не злоупотребляйте reduce, если нужно просто накопить значения
— Для больших данных используйте явный цикл — он понятнее и быстрее
— Чистый код — это не в одну строку, а читаемый и оптимальный
#hotfix #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Страница вроде простая, но со временем начинает тормозить, а Chrome показывает +1 ГБ к потреблению памяти.
Знакомо?
#under_hood #js
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥰3🔥2
Раннее мы выкладывали задачу
Правильный ответ:
JS делит выполнение на две фазы:
1. Инициализация (создание окружения) — компилятор видит
let a = 2
внутри функции и создаёт для неё локальную переменную a
.2. Выполнение — когда доходит до
console.log(a)
, движок уже знает о локальной a
, но она ещё не инициализирована.⚠️ Поэтому обращение к ней до строки
let a = 2
вызывает ReferenceError, даже если код в if
не выполнится.#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤5👍1
Иногда после API-запроса или сборки данных в объекте куча undefined — их не видно, но они мешают при сериализации, сравнении и логах.
const clean = obj => Object.fromEntries(
Object.entries(obj).filter(([_, v]) => v !== undefined)
);
— пробегается по всем парам [ключ, значение],
— выкидывает те, где значение undefined,
— возвращает новый “чистый” объект.
clean({ name: 'Alex', age: undefined, city: 'Berlin' });
// => { name: 'Alex', city: 'Berlin' }
— перед отправкой данных на сервер,
— при сборке форм,
— при логировании чистых JSON.
const clean = obj =>
Object.fromEntries(
Object.entries(obj)
.filter(([_, v]) => v !== undefined)
.map(([k, v]) => [k, v && typeof v === 'object' && !Array.isArray(v) ? clean(v) : v])
);
— рекурсивно чистит вложенные объекты,
— не трогает массивы,
— остаётся компактной и читаемой.
#readme #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥2