Задачи по JavaScript для подготовки к собеседованию. Часть 1.
В этой статье я рассматриваю пять задач, проверяющих знание JavaScript. Каждая их них снабжена объяснением и алгоритмом решения. В конце даны ссылки на документацию.
Для начала немного о том, почему я решил написать этот материал. Пару лет назад я готовился к очередному интервью по JavaScript и собирал в отдельный репозиторий задания, проверяющие его знание. После получения оффера я благополучно про них забыл, но недавно наткнулся на эту коллекцию, привел примеры в порядок и решил поделиться ими с вами. Так как материала получилось достаточно много, то я решил сделать серию статей. Надеюсь, у меня хватит сил выпустить еще несколько частей, в каждой из которых будет по пять примеров. Буду очень рад, если этот материал поможет кому-то получить работу.
1. Две старейшины
Буду честен, я сам придумал название для этой задачи, суть которой заключается в том, чтобы найти два самых больших по значению числа в массиве.
Обязательные условия
- Входящий массив должен состоять только из чисел.
- Функция должна вернуть массив с двумя наибольшими по значению числами.
Основная идея
Нужно написать функцию, которая принимает массив с числами, сортирует его по возрастанию и возвращает последние два его значения.
Решение
- Сортируем массив по возрастанию методом .sort(), указывая в качестве аргумента функцию сравнения.
- Методом .slice() удаляем все значения массива, кроме двух последних.
- Возвращаем получившийся массив.
2. Удаление дубликатов слов
Для интервью это типичная задача. Она базируется на поиске уникальных слов в строке и удалении их дубликатов. Ее можно решить несколькими способами, я приведу только один из них.
Обязательные условия
Основная идея
Нужно написать функцию, которая обработает входящую строку, определит, какие слова в ней находятся, и вернет очищенную от повторов новую строку.
Решение
- Создаем set. Set – коллекция для хранения множества значений, причем каждое значение может встречаться лишь один раз.
- Методом .split(' ') с указанным в качестве разделителя пробелом преобразуем строку в массив слов.
- Методом .forEach проходим по всем элементам массива, добавляя каждый их них в set. Так как коллекция множеств может содержать только уникальные значения, в случае повтора слова оно не будет добавлено.
- При помощи spread-оператора преобразуем set в массив.
- Методом .join(' ') с указанным в качестве разделителя пробелом преобразуем массив обратно в строку.
- Возвращаем получившееся значение.
3. Вычитание одного массива из другого
Эта задача также часто встречается на интервью на роль Junior или Trainee JavaScript-разработчика. Она проверяет, как кандидат понимает фильтрацию данных и умеет работать с ней.
Обязательные условия
- Функция должна принимать два аргумента, каждый из которых представляет собой массив с числами.
- Функция должна сравнить элементы массивов, а затем сформировать новый, с уникальными значениями, и вернуть его.
Основная идея
Суть алгоритма, заключенного в этой функции, состоит в том, что мы должны перебрать один из двух входящих массивов и проверить, есть ли его значения в другом массиве. Если у него нет совпадений, то записываем число в новый массив, который надо вернуть после прохождения цикла.
Решение
- Перебрать элементы первого массива методом .filter(), передав в качестве аргумента функцию, определяющую правила фильтрации.
- В функции фильтрации проверить, есть ли копия элемента массива во втором массиве при помощи метода .includes().
- Если совпадения нет, то функция фильтрации должна возвращать true.
- Метод .filter() создает новый массив с элементами, удовлетворяющими условиям. Соответственно, у нас образуется массив с уникальными элементами, его мы и вернем как результат
4. Подсчет количества гласных в строке
Эта задача также проверяет способность работать с фильтрацией и строками, уровень сложности также примерно на уровне Junior или Trainee JavaScript-разработчика.
Обязательные условия
- Функция должна принимать в качестве аргумента строку, состоящую из символов латиницы.
- Учитываться должны все гласные вне зависимости от регистра.
- На выходе функции должно получаться число.
Основная идея
Суть алгоритма – в том, чтобы привести исходную строку в нижний регистр, преобразовать ее в массив символов, отфильтровать все гласные и вернуть их количество.
Решение
- Создать массив test, содержащий все гласные латинского алфавита, он нам понадобится для фильтрации.
- При помощи метода .toLowerCase() преобразовать исходную строку в нижний регистр.
- Методом .split('') преобразовать исходную строку в массив.
- Методом .filter() отфильтровать гласные буквы, для этого передать ему в качестве аргумента функцию фильтрации.
- В функции фильтрации методом .includes() проверить, совпадает ли символ преобразованной в массив строки с каким-либо значением из массива test.
- Если есть совпадение, значит, символ является гласной буквой и нужно вернуть true.
- После фильтрации массива нужно посчитать, какое количество символов осталось. Это можно сделать, вызвав свойство массива .length.
- То число, которое получилось, мы и возвращаем в качестве результата.
5. Палиндром
Палиндром – это слово, предложение или последовательность символов, абсолютно одинаково читающееся в обоих направлениях – слева направо и справа налево. Примером может послужить слово «radar».
Задача состоит в том, чтобы написать функцию, проверяющую, является ли строка палиндромом или нет. Это классическое для собеседований испытание, особенно на роль Junior или Trainee программиста.
Обязательные условия
- Если строка – палиндром, функция возвращает true.
- Если строка палиндромом не является, функция возвращает false.
- Нужно учитывать пробелы и знаки препинания.
Основная идея
Нужно написать функцию, которая перевернет строку в обратном направлении и проверит ее на идентичность с исходной строкой.
Решение
- Преобразовываем символы исходной строки в нижний регистр. Это даст нам гарантию, что сравниваться будет именно значение символа. Как известно, в программировании регистр имеет значение. Символ в верхнем регистре не равен себе же в нижнем.
- Делаем реверс строки, он проходит в несколько шагов:
- У строк в JS нет метода .reverse(), но он есть у массивов, поэтому мы преобразовываем исходную строку в массив методом .split().
- Применяем к получившемуся массиву метод .reverse().
- «Собираем» массив обратно в строку методом .join().
- Сравниваем получившуюся строку с исходной, после чего возвращаем true или false.
Список литературы
Возможно, вы обратили внимание, что задачи достаточно однотипны, и это действительно так. В этой заметке я представил испытания, проверяющие в основном навыки работы с массивами и строками. По сути, вне зависимости от условий задачи мы пользовались примерно одним и тем же набором методов, что закрепляет их понимание. Тем ни менее я крайне рекомендую ознакомиться с документацией. Больше информации вы можете найти по этим ссылкам:
- Методы для работы с массивами в JavaScript
- Методы для работы со строками в JavaScript
- Структуры данных Map и Set в JavaScript
- Spread оператор в JavaScript
Напоследок
Если вам понравилась статья и вы хотите больше подобного контента, то ставьте лайки и подписывайтесь на мой блог и социальные сети. Буду рад подискутировать в комментариях! Всем спасибо!