Упражнения по JavaScript
Напиши функцию создания генератора sequence(start, step). Она при вызове возвращает другую функцию-генератор, которая при каждом вызове дает число на 1 больше, и так до бесконечности. Начальное число, с которого начинать отсчет, и шаг, задается при создании генератора. Шаг можно не указывать, тогда он будет равен одному. Начальное значение по умолчанию равно 0. Генераторов можно создать сколько угодно.
Шаг 2
Также, нужна функция take(fn, count) которая вызвает функцию fn заданное число (count) раз и возвращает массив с результатами вызовов. Она нам пригодится для отладки:
Шаг 3
Напиши функцию map(fn, array), которая принимает на вход функцию и массив, и обрабатывает каждый элемент массива этой функцией, возвращая новый массив. Пример:
Обрати внимание: функция не должна изменять переданный ей массив:
Это аналог array_map из PHP.
Шаг 4
Напиши функцию fmap(a, gen), которая принимает на вход 2 функции, a и gen, где gen — функция-генератор вроде той, что была в первом задании. fmap возвращает новую функцию-генератор, которая при каждом вызове берет следующее значение из gen и пропускает его через функцию a. Пример:
При этом, необходимо сделать так, чтобы в качестве gen можно было указать функцию с аргументами, и при вызове
Эти аргументы бы передавались функции gen. Аргументов может быть любое количество.
Шаг 5
Частичное применение (partial application)
Напиши функцию partial(fn, a1, a2, . ), которая позволяет зафиксировать один или несколько аргументов функции. Пример:
Есть функция с аргументами: f1(a, d, c, d);
Мы можем с помощью partial сделать из нее функцию с меньшим числом аргументов, заранее задав значения для нескольких из них, например:
И вызов: f2(x, y) будет равносилен вызову f1(1, 2, x, y);
Кстати, имеющийся в новых версиях JS метод bind() тоже может делать частичное применение: http://frontender.info/partial-application-in-javascript-using-bind/ Но ты должен обойтись без его использования, и написать свой велосипед.
Шаг 6
Наша функция partial позволяет фиксировать только первые аргументы. Усовершенствуй ее, чтобы зафиксировать можно было любые аргументы, пропущенные аргументы обозначаются с помощью undefined:
Чтобы избежать путаницы, пусть новая функция называется partialAny
Шаг 7
Напиши функцию bind, которая позволяет привязать контекст (значение this) к функции:
Такая функция есть в lodash: http://lodash.com/docs#pluck
Функция не должна изменять исходный массив.
Шаг 9
Напиши функцию filter(), которая принимает функцию-предикат и массив. Возвращает она массив значений, для которых предикат вернет true.
Задачи по JavaScript для начинающих от Tproger и GeekBrains
Вместе с факультетом Веб-разработки GeekUniversity собрали для вас несколько простых задач по JavaScript для обучения и тренировки, а также пару теоретических вопросов. Задачи расположены в порядке возрастания сложности.
Обратите внимание, что у любой задачи по программированию может быть несколько способов решения. Чтобы посмотреть добавленный нами вариант решения, кликните по соответствующей кнопке.
Задача 1
Напишите однострочное решение, которое вычисляет сумму квадратных корней для всех чётных чисел целочисленного массива.
Метод reduceRight() применяет функцию к аккумулятору и каждому значению массива (справа налево), сводя его к одному значению. А метод reduce() выполняет функцию callback один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента:
- начальное значение (или значение от предыдущего вызова callback );
- значение текущего элемента;
- текущий индекс;
- массив, по которому происходит итерация.
Задача 2
Напишите функцию, которая пишет в консоль число в заданном диапазоне, в случае, если оно успешно делится или не делится с остатком или без остатка в зависимости от параметров.
Задача 3
Есть ферма животных, у всех животных есть имена и возраст. Животные бывают разных типов: Кошки, Собаки, Коровы. У каждого животного могут быть дети. Если животное является родителем этих детей, в свою очередь глубина семейного древа может достигать N либо 0 .
Опишите структуры данных для фермы животных и напишите функцию, которая делает подсчёт всех возрастов животных и выводит общий возраст для всей фермы.
Задача 4
Перепишите функцию clone таким образом, чтобы она была способна клонировать переданный как параметр объект.
Deep copy (глубокое копирование)
Experimental deep copy (экспериментальное глубокое копирование)
Как пишут на Stack Overflow, HTML-стандарт включает в себя алгоритм структурированного клонирования, который может создавать глубокие копии объектов. Он всё ещё ограничен встроенными типами, но в дополнение к тем типам, что поддерживаются в JSON, поддерживает Dates, RegExps, Maps, Sets, Blobs, FileLists, ImageDatas, Sparse Arrays, Typed Arrays и, вероятно, больше в будущем. Решает также проблемы цикличных и рекурсивных структур, которые ломают JSON.
Shallow copy (поверхностное копирование)
Клонирование вложенных свойств по ссылке пропускается, нужно быть осторожным в использовании.
Задача 5
Выйдите из цикла, изменив только две отмеченные строки. Результат в консоли сейчас останавливается на 9 9 . Должен на 5 4 .
Как пишут на MDN web docs, инструкция метки (label) используется вместе с break или continue для альтернативного выхода из цикла. Метка добавляется перед блочным выражением в качестве ссылки, которая может быть использована в дальнейшем.
Задача 6
Яблоко стоит 1.15, апельсин стоит 2.30. Сколько они стоят вместе – чему равна сумма 1.15 + 2.30 с точки зрения JavaScript?
Число хранится в памяти в бинарной форме, как последовательность бит – единиц и нулей. Но дроби, такие как 1.15, 2.30, которые выглядят довольно просто в десятичной системе счисления, на самом деле являются бесконечной дробью в двоичной форме. Это объяснение взято с сайта Современный учебник JavaScript, там же можно подробно почитать про числа в языке.
Задача 7
Чему равен typeof null в режиме use strict ?
Все JavaScript-программисты давно привыкли к тому, что typeof null === ‘object’; // true , хотя фактически null — примитивное значение. Многие знают, что это баг, и лично Брэндан Айк это признаёт. Этот баг, вероятно, никогда не будет исправлен из-за необходимости сохранения обратной совместимости существующего кода с новыми версиями языка.
Хотите вырасти от новичка до профессионала? Факультет Веб-разработки GeekUniversity даёт полтора года опыта для вашего резюме. Обучайтесь на практических заданиях, по-настоящему освойте фулстек-разработку и станьте ближе к профессии мечты.
Узнать больше
Где найти задачи по javascript

Задачи, тесты и теоретические вопросы по JavaScript. Так же react, vue, angular, node.js
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Name already in use
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Оттачивай навыки алгоритмики и кодирования.
В этом репозитории собраны задачи, решение которых поможет закрепить навыки программирования и подготовиться к техническим собеседованиям.
Вместе с задачами поставляется система для автоматической проверки решений написанных на JavaScript.
- Убедись, что git и node v10.13.0+ установлены на твоем компьютере
- Склонируй репозиторий
- В папке с проектом из терминала выполни npm ci
Теперь можно приступать к решению задач!
Задачи находятся в папке /problems. Каждая задача оформлена в виде отдельного .js файла.
Каждый файл имеет следующую структуру:
- Комментарий с
- описанием условия задачи
- примером вызова функции, передаваемых аргументов и ожидаемым результатом
- JSDoc для параметров и возвращаемого функцией значения
- Заглушка тела функции. Пиши свое решение здесь
- Инструкция module.exports = … делает функцию доступной для автоматического тестирования
Система автоматичекой проверки решений может быть запущена в одном из трех режимов.
Рекомендуется использовать автоматическую проверку в связке с pre-commit. А каждую решенную задачу оформлять в виде коммита, чтобы не запускать лишние тесты.
Эта команда проверит правильность решений для всех файлов в которые были внесены изменения и git статус которых not staged for commit .
Эта проверка работает по тому же принципу, что и ручная, только тесты запускаются автоматически на каждое сохранение файла.
Каждую решенную задачу рекомендуется оформлять в отдельный коммит. Pre-commit проверка автоматически запускается на выполнение команды git commit . Тесты выполняются для всех файлов добавленных в содержание коммита.
При решении задач в IDE Visual Studio Code подключение отладчика происходит в пару кликов:
- В меню среды разработки выбрать View -> Debug . Слева отобразится панель отладчика
- Выбрать Debug js-problems как конфигурацию отладчика (видеоверсия)
- Через меню запустить отладчик Debug -> Start Debugging . git статус отлаживаемого файла должен быть not staged for commit .
Данный ресурс создавался, преимущественно, для тех, кто испытывает проблемы с английским языком. Невходящие в их число могут попробовать свои силы на следующих сайтах:
Как альтернативный русскоязычный сборник задач можно рассматривать сайт «Школа программиста», но без системы для автоматической проверки JavaScript решений.
Любой желающий может помочь проекту, например:
- добавлением новых задач в сборник
- расширением тест-кейсов
Для этого оформляйте свои предложения в виде задач.
Проект разрабатывается под лицензией MIT.
About
Русскоязычный сборник задач с автоматической системой проверки JavaScript решений