JavaScript Ready | Программирование
8.17K subscribers
831 photos
48 videos
369 links
Авторский канал по разработке на JavaScript.
Ресурсы, обучения, задачи, шпаргалки.
Ежедневно информация пополняется!

Автор: @energy_it

Реклама на бирже:
https://telega.in/c/javascript_readyy
Download Telegram
📂 Напоминалка по циклам в JavaScript!

Например, for удобно использовать, когда заранее известно количество итераций, а for...of — когда нужно пройтись по массиву или строке.

На картинке — 5 циклов, которые постоянно встречаются в коде.

Сохрани, чтобы не забыть!

📣 JS Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
19🤝10👍8
📱 Управление выполнением: контекст вызова и жизненный цикл операций!

В шпаргалке собраны основные приёмы управления выполнением функций. Рассматриваются способы явного задания контекста с помощью call, apply и bind, а также инструменты для отмены асинхронных операций через AbortController и AbortSignal. Материал охватывает практические примеры, связанные с контролем контекста, аргументов и жизненного цикла выполнения.

📣 JS Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥128👍7🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 Точность и согласованность кода благодаря функции автозаполнения!

IntelliCode
— улучшает автодополнение в VS Code: предлагает варианты на основе контекста, типа данных и того, что ты уже написал. Удобно в больших проектах, где важно быстрее находить нужные методы и не отвлекаться.

📣 JS Ready | #vscode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8🤝81
Проверка наличия элемента!

Когда нужно понять, есть ли значение в массиве, раньше почти всегда делали с indexOf.

Проблема в том, что он возвращает индекс или -1, а -1 в JS - truthy, из-за чего легко написать логически неверную проверку:
if (![1, 2].indexOf(3)) {
// выглядит приемлемо, но работает неправильно
}


Здесь ошибка не в синтаксисе, а в модели мышления, indexOf вообще не про boolean.

includes решает эту проблему на уровне API: он возвращает true или false, без неявных преобразований.
[1, 2].includes(2); // true
[1, 2].includes(3); // false


А отрицание читается ровно так, как написано:
if (![1, 2].includes(3)) {
console.log('Not found');
}


🔥 Код короче, шансов на логическую ошибку практически нет, поэтому includes отличный выбор для проверок, а indexOf стоит оставлять только для получения индекса.

📣 JS Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍109
This media is not supported in your browser
VIEW IN TELEGRAM
😎 Tutorial Republic — подробный и практичный справочник по JavaScript!

Это полноценный справочник с чёткими объяснениями, примерами кода и интерактивными демо. Каждая тема сопровождается примерами, которые можно сразу попробовать и понять, как именно работает та или иная конструкция. Очень полезно и новичкам, и тем, кто хочет освежить знания или быстро найти пример по конкретной задаче.

📌 Оставляю ссылочку: tutorialrepublic.com

📣 JS Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1310🔥9
Пишем консольную мини-игру «Быки и коровы»!

Для тех, кто не знает или забыл правила: игрок угадывает 4-значное число без повторов. Бык - цифра угадана и стоит на своём месте. Корова - цифра есть в числе, но позиция неверная.

Подключаем консольный ввод и генерируем секретное число: 4 разные цифры в случайном порядке:
const rl = require("readline").createInterface({
input: process.stdin, output: process.stdout
});

const secret = [...new Set(
Array.from({ length: 10 }, (_, i) => i)
)].sort(() => 0.5 - Math.random()).slice(0, 4).join("");


Здесь важно, что число создаётся один раз и не меняется до конца игры.

Главная часть игры: сравниваем ввод игрока с секретом и считаем совпадения.
const score = g => {
let b = 0, c = 0;
for (let i = 0; i < 4; i++)
secret[i] === g[i] ? b++ : secret.includes(g[i]) && c++;
return [b, c];
};


Если цифра совпала по индексу - это бык, если просто присутствует - корова.

Каждый ход - это запрос числа, валидация и подсчёт результата:
const turn = () => rl.question("Число: ", g => {
if (!/^\d{4}$/.test(g)) return turn();
const [b, c] = score(g);


Принимаем только корректный ввод, ровно 4 цифры, иначе ход повторяется.

Если все цифры угаданы на своих местах, игра заканчивается, иначе показываем подсказку:
  if (b === 4) return win();
console.log(`🐂 ${b} | 🐄 ${c}`);
turn();
});


Финал и точка входа максимально простые:
const win = () => {
console.log(`🏆 Победа! Было: ${secret}`);
rl.close();
};
turn();


🔥 Эта игра помогает попрактиковать работу с состоянием, пользовательским вводом и управлением асинхронным потоком

📣 JS Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ JS for Cats — самоучитель для тех, кто устал от скучной теории!

Это необычное руководство по JS, построенное так, чтобы его было легко читать и понимать. Материал объясняет базовые концепции языка простым языком, с примерами и объяснениями. Ресурс подойдёт для знакомства с синтаксисом или для повторения основ без излишне сложной теории.

📌 Оставляю ссылочку: jsforcats.com

📣 JS Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1410👍8
Дополнительные функции обратного вызова!

Иногда функция должна быть универсальной и вызывать колбэк только если он передан, при этом не увеличивая код проверками:
if (callback) {
  callback(data);
}


В JS это делается напрямую через optional chaining, без условий и лишней логики:
callback?.(data);


Если колбэк не передан, код просто пропускается, если передан — вызывается как обычная функция:
fetchData('/api/user');
fetchData('/api/user', data => console.log(data));


🔥 Такой приём позволяет проектировать API с опциональным поведением без перегрузок функций и условий.

📣 JS Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍149🤝8
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 Живой предпросмотр Markdown-файлов во время редактирования!

Markdown Preview Enhanced — расширяет стандартный предпросмотр Markdown в VS Code. Поддерживает диаграммы, формулы, графики, Mermaid, подсветку кода, экспорт в PDF и HTML. Сразу видишь, как будет выглядеть README, документация или статья, без внешних инструментов и лишних шагов.

📣 JS Ready | #vscode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156🤝5
📱 Строим мини-движок виртуальной файловой системы!

Реализуем древовидную структуру, моделирующую файловую систему, и напишем универсальный механизм поиска по этому дереву.

В этой задаче:
Работаем с вложенными объектами как с деревом;

Реализуем рекурсивный обход;

Строим чистую функцию поиска без глобального состояния;

Разделяем механизм обхода и критерий фильтрации.


Это разбор базового паттерна обхода структур, который лежит в основе множества реальных инструментов.

📣 JS Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍9🔥8🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
👍 Proglang — отличный ресурс для изучения html/css!

Здесь по шагам объясняют, как создаются html-страницы, как работают теги, формы, таблицы, семантика. А также как оформлять всё это с помощью CSS: селекторы, цвета, layout, Flexbox, Grid и адаптивный дизайн. Материалы поданы простым языком и с примерами, удобно для новичков и тех, кто хочет повторить базу.

📌 Оставляю ссылочку: proglang.su

📣 JS Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥9👍7
Простой поиск по массиву объектов с поддержкой нескольких полей!

Частая задача в интерфейсах — быстрый клиентский поиск: таблицы, списки пользователей, товары. Ниже — универсальная функция фильтрации без библиотек для substring-поиска по нескольким полям.

Допустим, есть массив:
const users = [
{ id: 1, name: "Alex Ivanov", email: "alex@mail.com" },
{ id: 2, name: "Maria Petrova", email: "maria@mail.com" },
{ id: 3, name: "John Smith", email: "john@mail.com" }
];


Требование: регистронезависимый поиск по name и email с частичным совпадением.

Функция поиска:
function normalize(value) {
return String(value ?? "")
.toLowerCase()
// Удаление диакритики (если это нужно в проекте)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "");
}

function search(items, query, fields) {
const q = normalize(query).trim();
if (!q) return items;

return items.filter(item =>
fields.some(field => normalize(item[field]).includes(q))
);
}


normalize делает безопасное приведение к строке, единый регистр и (опционально) удаление диакритики. trim() исключает пустые запросы, some реализует OR по полям.

Использование:
console.log(search(users, "alex", ["name", "email"]));
// [{ id: 1, name: "Alex Ivanov", ... }]

console.log(search(users, "mail.com", ["name", "email"]));
// все пользователи


Поиск работает через includes, поэтому это именно substring-поиск: частичные совпадения, простое поведение.

Если пользователь вводит несколько слов, часто логично требовать совпадение каждого, но разрешать нахождение слов в разных полях:
function searchMulti(items, query, fields) {
const tokens = normalize(query)
.trim()
.split(/\s+/)
.filter(Boolean);

if (!tokens.length) return items;

return items.filter(item =>
tokens.every(token =>
fields.some(field => normalize(item[field]).includes(token))
)
);
}


Здесь: every задаёт AND по словам запроса, some сохраняет OR по полям.

searchMulti(users, "alex mail", ["name", "email"]);


alex совпадает в name, mail — в email, поэтому объект будет найден.

🔥 Для списков до нескольких тысяч элементов обычно достаточно без сторонних библиотек. Если данных больше или поиск вызывается очень часто — имеет смысл кэшировать нормализованные значения или строить индекс.

📣 JS Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝10👍9🔥93
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 Знаете, что в VS Code можно быстро генерировать фейковые данные для тестов с помощью плагина?

Faker — позволяет легко вставлять случайные имена, адреса, номера телефонов, даты и другие данные прямо в ваш код.

Очень удобно при разработке и тестировании, особенно если нужно наполнить макеты реалистичными значениями.

📣 JS Ready | #vscode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍12🤝71