This media is not supported in your browser
VIEW IN TELEGRAM
Это репозиторий с компактным, но очень полезным материалом. Внутри собраны ключевые концепции и паттерны, которые постоянно встречаются в коде. Всё сопровождается небольшими примерами и пояснениями, поэтому ресурс удобно использовать как быстрый справочник, когда нужно освежить синтаксис.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍9🔥8🤝3
Объединение и клонирование объектов!
Иногда нужно объединить несколько объектов или создать копию объекта. Многие делают это вручную, добавляя свойства по одному:
В JS для этого есть нативный метод
Если передать несколько источников, все их свойства будут объединены:
Первый аргумент — объект, в который происходит копирование.
Часто передают пустой
Теперь
🔥 Этот метод особенно полезен при работе с конфигурациями, состоянием приложений, объединением данных API и созданием копий объектов без ручного копирования.
📣 JS Ready | #совет
Иногда нужно объединить несколько объектов или создать копию объекта. Многие делают это вручную, добавляя свойства по одному:
const result = {};
result.id = user.id;
result.name = details.name;В JS для этого есть нативный метод
Object.assign(), который копирует собственные перечисляемые свойства из одного или нескольких объектов в целевой объект:Object.assign(target, ...sources)
Если передать несколько источников, все их свойства будут объединены:
const merged = Object.assign({}, user, details);Первый аргумент — объект, в который происходит копирование.
Часто передают пустой
{}, чтобы получить новый объект и не изменять исходные данные:const clone = Object.assign({}, user);Теперь
clone — поверхностная (shallow) копия объекта.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤8🔥7🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
Markdown All in One расширяет возможности работы с Markdown в VS Code: автодополнение, быстрые команды форматирования, создание оглавления, предпросмотр, горячие клавиши и удобная навигация по документу. Всё, что нужно для комфортной работы с документацией и заметками.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥9❤7🤝1
parseInt и map — скрытая ловушка из-за второго аргумента!
Конструкция
Метод
Что происходит на самом деле:
То есть результат начинает зависеть от индекса элемента. Это может привести к ошибкам при обработке данных из API, CSV, query-параметров и любых строковых чисел.
Правильный вариант — явно задать функцию преобразования:
Или использовать
Разница между
Если нужны корректные дробные значения — лучше
Ещё один компактный вариант — унарный плюс:
Он выполняет то же преобразование, что и
🔥 Не передавайте
📣 JS Ready | #практика
Конструкция
array.map(parseInt) выглядит логично, но часто даёт неожиданный результат. Всё из-за сигнатуры функции parseInt(string, radix).Метод
map передаёт в колбэк три аргумента: (element, index, array). Второй аргумент индекс — попадает в parseInt как основание системы счисления (radix).["10", "10", "10"].map(parseInt);
// [10, NaN, 2]
Что происходит на самом деле:
parseInt("10", 0); // 10 (основание определяется автоматически)
parseInt("10", 1); // NaN (radix < 2 — недопустимо)
parseInt("10", 2); // 2 (двоичная система)То есть результат начинает зависеть от индекса элемента. Это может привести к ошибкам при обработке данных из API, CSV, query-параметров и любых строковых чисел.
Правильный вариант — явно задать функцию преобразования:
["10", "10", "10"].map(x => parseInt(x, 10));
// [10, 10, 10]
Или использовать
Number, если нужно преобразовать строку целиком:["10", "10", "10"].map(Number);
// [10, 10, 10]
Разница между
Number и parseInt существенная:Number("10px"); // NaN
parseInt("10px"); // 10parseInt читает число до первого нечислового символа и отбрасывает дробную часть:parseInt("1.5"); // 1Если нужны корректные дробные значения — лучше
Number или parseFloat:["1.5", "2.7"].map(Number);
// [1.5, 2.7]
Ещё один компактный вариант — унарный плюс:
["10", "20", "30"].map(x => +x);
// [10, 20, 30]
Он выполняет то же преобразование, что и
Number, но короче.parseInt напрямую в map. Всегда указывайте radix или используйте Number — так вы избежите неочевидных багов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥10👍7🤝1
Нативная группировка данных в JS!
Частая задача — сгруппировать данные по какому-то полю. Обычно это делают через
Но в современном JS есть нативный способ группировки —
Метод принимает итерируемую коллекцию и функцию, которая возвращает ключ группы:
Результат — объект, где ключи это группы, а значения — массивы элементов:
Ключи в
Если нужны ключи любого типа без преобразования — можно использовать
🔥 Это упрощает агрегацию данных: аналитика, таблицы, API-ответы, группировка логов, отчёты и подготовку данных для UI.
📣 JS Ready | #совет
Частая задача — сгруппировать данные по какому-то полю. Обычно это делают через
reduce:const byId = users.reduce((acc, u) => {
(acc[u.id] ??= []).push(u);
return acc;
}, {});Но в современном JS есть нативный способ группировки —
Object.groupBy():Object.groupBy(iterable, callback)
Метод принимает итерируемую коллекцию и функцию, которая возвращает ключ группы:
const byId = Object.groupBy(users, u => u.id);
Результат — объект, где ключи это группы, а значения — массивы элементов:
{
"1": [{ id: 1, name: 'Jane' }],
"2": [{ id: 2, name: 'John' }]
}Ключи в
Object.groupBy() становятся свойствами объекта.Если нужны ключи любого типа без преобразования — можно использовать
Map.groupBy():const grouped = Map.groupBy(users, u => u.id);
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤9👍9
This media is not supported in your browser
VIEW IN TELEGRAM
От сортировок, поиска и рекурсии до графов, динамического программирования и даже криптографии - всё собрано в одном месте. Каждый алгоритм снабжён кодом и пояснениями, так что учиться и разбираться просто и интересно.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤8👍8👎1
Шпаргалка по базовым операциям с регулярными выражениями. Показано, как проверять наличие совпадений, извлекать найденные фрагменты и группы захвата, получать все совпадения в строке, а также выполнять поиск, замену и разделение строк по шаблону. Также кратко разобраны различия в поведении методов и влияние флагов регулярных выражений.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥14🤝8👍7❤3
matchMedia — проверка и отслеживание media queries!
Функция возвращает объект
Базовое использование:
Пример 1 — проверка условия:
Так можно адаптировать поведение интерфейса под системные настройки пользователя.
Пример 2 — отслеживание изменения
Событие
Это позволяет реагировать на изменение состояния
Пример 3 — адаптация логики интерфейса:
Обработчик сначала вызывается вручную для установки начального состояния, затем автоматически при изменении
Пример 4 — учет пользовательских настроек доступности:
Пример 5 — отслеживание ориентации экрана:
🔥
📣 Code Ready | #практика
matchMedia() — Web API, позволяющий проверять и отслеживать media queries напрямую из JavaScript. Это помогает синхронизировать поведение JS-кода с CSS-адаптивностью.Функция возвращает объект
MediaQueryList, содержащий результат проверки media query.Базовое использование:
const media = window.matchMedia('(max-width: 768px)');
console.log(media.matches);matches — boolean, показывающий соответствует ли текущий viewport заданному media query.Пример 1 — проверка условия:
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark-theme');
}Так можно адаптировать поведение интерфейса под системные настройки пользователя.
Пример 2 — отслеживание изменения
media query:const media = window.matchMedia('(max-width: 768px)');
media.addEventListener('change', e => {
console.log('mobile:', e.matches);
});Событие
change срабатывает при изменении состояния media query.Это позволяет реагировать на изменение состояния
media query без использования window.resize.Пример 3 — адаптация логики интерфейса:
const media = window.matchMedia('(max-width: 600px)');
function updateLayout(mql) {
if (mql.matches) {
enableMobileLayout();
} else {
enableDesktopLayout();
}
}
updateLayout(media);
media.addEventListener('change', updateLayout);Обработчик сначала вызывается вручную для установки начального состояния, затем автоматически при изменении
media query.Пример 4 — учет пользовательских настроек доступности:
const motion = window.matchMedia('(prefers-reduced-motion: reduce)');
if (motion.matches) {
disableAnimations();
}Media queries позволяют учитывать пользовательские настройки доступности.Пример 5 — отслеживание ориентации экрана:
const orientation = window.matchMedia('(orientation: portrait)');
orientation.addEventListener('change', e => {
console.log('portrait:', e.matches);
});matchMedia используется для: адаптивной логики интерфейса, синхронизации JavaScript и CSS media queries, учета пользовательских настроек доступности и оптимизации поведения UI на разных устройствах.matchMedia — удобный способ проверять и отслеживать media queries напрямую из JavaScript.Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍10🔥7🤝2
Например, объект помогает хранить данные в формате ключ-значение, а через dot notation, bracket notation и destructuring можно быстро получать и использовать нужные свойства.
На картинке — базовые приёмы работы с объектами: создание, доступ к свойствам, изменение значений, добавление новых полей, деструктуризация и методы.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥8❤7🤝1
Как читать элементы массива с конца через at()!
Раньше доступ к элементам с конца массива требовал ручных вычислений длины и это ухудшало читаемость кода.
Например, чтобы получить последний и предпоследний элементы, обычно писали так.
Традиционный способ:
При сложных выражениях или частых обращениях к последним элементам такой код становится менее читаемым.
Современный метод at() позволяет обращаться к элементам массива с конца через отрицательные индексы:
Метод также поддерживает обычные положительные индексы:
Если индекс выходит за пределы массива, метод возвращает undefined:
Один из практических сценариев — работа со стеком, когда нужно быстро посмотреть верхний элемент:
Метод работает не только с массивами, но и со строками:
В отличие от charAt(), метод at() поддерживает отрицательные индексы.
Он также доступен для TypedArray:
🔥 Важно: at() не мутирует данные и не создаёт копий — это просто способ получить элемент по индексу. Метод поддерживается современными браузерами и современными версиями Node.js.
📣 JS Ready | #практика
Раньше доступ к элементам с конца массива требовал ручных вычислений длины и это ухудшало читаемость кода.
Например, чтобы получить последний и предпоследний элементы, обычно писали так.
Традиционный способ:
const arr = ["a", "b", "c", "d"];
const last = arr[arr.length - 1];
const prev = arr[arr.length - 2];
console.log(last); // "d"
console.log(prev); // "c"
При сложных выражениях или частых обращениях к последним элементам такой код становится менее читаемым.
Современный метод at() позволяет обращаться к элементам массива с конца через отрицательные индексы:
const arr = ["a", "b", "c", "d"];
arr.at(-1); // "d"
arr.at(-2); // "c"
Метод также поддерживает обычные положительные индексы:
arr.at(0); // "a"
arr.at(2); // "c"
Если индекс выходит за пределы массива, метод возвращает undefined:
arr.at(100); // undefined
arr.at(-100); // undefined
Один из практических сценариев — работа со стеком, когда нужно быстро посмотреть верхний элемент:
function peek(stack) {
return stack.at(-1);
}Метод работает не только с массивами, но и со строками:
"hello".at(-1); // "o"
В отличие от charAt(), метод at() поддерживает отрицательные индексы.
Он также доступен для TypedArray:
const bytes = new Uint8Array([10, 20, 30]);
bytes.at(-1); // 30
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍9🔥6🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
YAML — расширение для VS Code, которое добавляет подсветку синтаксиса, автодополнение и проверку структуры YAML-файлов. Помогает быстрее писать конфиги для Docker, Kubernetes, GitHub Actions и других инструментов, сразу показывая ошибки и подсказки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥8👍7🤝1
Проверка условий в массиве без явного цикла!
Когда нужно проверить элементы массива, многие пишут цикл и флаги:
В JS для таких проверок есть нативные методы —
Метод
Метод
Оба метода прекращают перебор, как только результат становится понятен, поэтому код получается короче и читаемее.
🔥 Особенно полезно при валидации данных, проверке прав доступа и любой логике, где нужно быстро проверить условие для массива.
📣 JS Ready | #совет
Когда нужно проверить элементы массива, многие пишут цикл и флаги:
let hasEven = false;
for (const n of numbers) {
if (n % 2 === 0) {
hasEven = true;
break;
}
}
В JS для таких проверок есть нативные методы —
some() и every(), которые позволяют обойтись без явного цикла.Метод
some() проверяет, выполняется ли условие хотя бы для одного элемента массива:const hasEven = numbers.some(n => n % 2 === 0);
Метод
every() проверяет, выполняется ли условие для всех элементов массива:const allEven = numbers.every(n => n % 2 === 0);
Оба метода прекращают перебор, как только результат становится понятен, поэтому код получается короче и читаемее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤10🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
Это сайт с подборкой руководств, шпаргалок и полезных материалов для JavaScript-разработчиков. Здесь собраны статьи по TypeScript, React, Node.js, Next.js и другим технологиям. На сайте можно найти объяснения сложных тем, алгоритмы и структуры данных, а также практические гайды по инструментам вроде Docker и GraphQL. Все материалы удобно структурированы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥11👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝13👍9🔥9