Programming
January 18, 2022

Задачи по JavaScript для подготовки к собеседованию. Часть 1.

В этой статье я рассматриваю пять задач, проверяющих знание JavaScript. Каждая их них снабжена объяснением и алгоритмом решения. В конце даны ссылки на документацию.

Для начала немного о том, почему я решил написать этот материал. Пару лет назад я готовился к очередному интервью по JavaScript и собирал в отдельный репозиторий задания, проверяющие его знание. После получения оффера я благополучно про них забыл, но недавно наткнулся на эту коллекцию, привел примеры в порядок и решил поделиться ими с вами. Так как материала получилось достаточно много, то я решил сделать серию статей. Надеюсь, у меня хватит сил выпустить еще несколько частей, в каждой из которых будет по пять примеров. Буду очень рад, если этот материал поможет кому-то получить работу.

1. Две старейшины

Буду честен, я сам придумал название для этой задачи, суть которой заключается в том, чтобы найти два самых больших по значению числа в массиве.

Обязательные условия

  • Входящий массив должен состоять только из чисел.
  • Функция должна вернуть массив с двумя наибольшими по значению числами.
Пример вызова функции

Основная идея

Нужно написать функцию, которая принимает массив с числами, сортирует его по возрастанию и возвращает последние два его значения.

Решение

  1. Сортируем массив по возрастанию методом .sort(), указывая в качестве аргумента функцию сравнения.
  2. Методом .slice() удаляем все значения массива, кроме двух последних.
  3. Возвращаем получившийся массив.
Подробное решение
Более красивое решение

2. Удаление дубликатов слов

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

Обязательные условия

  • Входящие данные должны быть строкой.
  • Функция должна вернуть строку, очищенную от дубликатов.
Пример вызова функции

Основная идея

Нужно написать функцию, которая обработает входящую строку, определит, какие слова в ней находятся, и вернет очищенную от повторов новую строку.

Решение

  1. Создаем set. Set – коллекция для хранения множества значений, причем каждое значение может встречаться лишь один раз.
  2. Методом .split(' ') с указанным в качестве разделителя пробелом преобразуем строку в массив слов.
  3. Методом .forEach проходим по всем элементам массива, добавляя каждый их них в set. Так как коллекция множеств может содержать только уникальные значения, в случае повтора слова оно не будет добавлено.
  4. При помощи spread-оператора преобразуем set в массив.
  5. Методом .join(' ') с указанным в качестве разделителя пробелом преобразуем массив обратно в строку.
  6. Возвращаем получившееся значение.
Подробное решение
Более красивое решение

3. Вычитание одного массива из другого

Эта задача также часто встречается на интервью на роль Junior или Trainee JavaScript-разработчика. Она проверяет, как кандидат понимает фильтрацию данных и умеет работать с ней.

Обязательные условия

  • Функция должна принимать два аргумента, каждый из которых представляет собой массив с числами.
  • Функция должна сравнить элементы массивов, а затем сформировать новый, с уникальными значениями, и вернуть его.
Пример вызова функции

Основная идея

Суть алгоритма, заключенного в этой функции, состоит в том, что мы должны перебрать один из двух входящих массивов и проверить, есть ли его значения в другом массиве. Если у него нет совпадений, то записываем число в новый массив, который надо вернуть после прохождения цикла.

Решение

  1. Перебрать элементы первого массива методом .filter(), передав в качестве аргумента функцию, определяющую правила фильтрации.
  2. В функции фильтрации проверить, есть ли копия элемента массива во втором массиве при помощи метода .includes().
  3. Если совпадения нет, то функция фильтрации должна возвращать true.
  4. Метод .filter() создает новый массив с элементами, удовлетворяющими условиям. Соответственно, у нас образуется массив с уникальными элементами, его мы и вернем как результат
Подробное решение
Более красивое решение

4. Подсчет количества гласных в строке

Эта задача также проверяет способность работать с фильтрацией и строками, уровень сложности также примерно на уровне Junior или Trainee JavaScript-разработчика.

Обязательные условия

  • Функция должна принимать в качестве аргумента строку, состоящую из символов латиницы.
  • Учитываться должны все гласные вне зависимости от регистра.
  • На выходе функции должно получаться число.

Основная идея

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

Решение

  1. Создать массив test, содержащий все гласные латинского алфавита, он нам понадобится для фильтрации.
  2. При помощи метода .toLowerCase() преобразовать исходную строку в нижний регистр.
  3. Методом .split('') преобразовать исходную строку в массив.
  4. Методом .filter() отфильтровать гласные буквы, для этого передать ему в качестве аргумента функцию фильтрации.
  5. В функции фильтрации методом .includes() проверить, совпадает ли символ преобразованной в массив строки с каким-либо значением из массива test.
  6. Если есть совпадение, значит, символ является гласной буквой и нужно вернуть true.
  7. После фильтрации массива нужно посчитать, какое количество символов осталось. Это можно сделать, вызвав свойство массива .length.
  8. То число, которое получилось, мы и возвращаем в качестве результата.
Подробное решение
Более красивое решение

5. Палиндром

Палиндром – это слово, предложение или последовательность символов, абсолютно одинаково читающееся в обоих направлениях – слева направо и справа налево. Примером может послужить слово «radar».

Задача состоит в том, чтобы написать функцию, проверяющую, является ли строка палиндромом или нет. Это классическое для собеседований испытание, особенно на роль Junior или Trainee программиста.

Обязательные условия

  • Если строка – палиндром, функция возвращает true.
  • Если строка палиндромом не является, функция возвращает false.
  • Нужно учитывать пробелы и знаки препинания.
Пример вызова

Основная идея

Нужно написать функцию, которая перевернет строку в обратном направлении и проверит ее на идентичность с исходной строкой.

Решение

  1. Преобразовываем символы исходной строки в нижний регистр. Это даст нам гарантию, что сравниваться будет именно значение символа. Как известно, в программировании регистр имеет значение. Символ в верхнем регистре не равен себе же в нижнем.
  2. Делаем реверс строки, он проходит в несколько шагов:
    1. У строк в JS нет метода .reverse(), но он есть у массивов, поэтому мы преобразовываем исходную строку в массив методом .split().
    2. Применяем к получившемуся массиву метод .reverse().
    3. «Собираем» массив обратно в строку методом .join().
  3. Сравниваем получившуюся строку с исходной, после чего возвращаем true или false.
Подробное решение
Более красивое решение

Список литературы

Возможно, вы обратили внимание, что задачи достаточно однотипны, и это действительно так. В этой заметке я представил испытания, проверяющие в основном навыки работы с массивами и строками. По сути, вне зависимости от условий задачи мы пользовались примерно одним и тем же набором методов, что закрепляет их понимание. Тем ни менее я крайне рекомендую ознакомиться с документацией. Больше информации вы можете найти по этим ссылкам:

  1. Методы для работы с массивами в JavaScript
  2. Методы для работы со строками в JavaScript
  3. Структуры данных Map и Set в JavaScript
  4. Spread оператор в JavaScript

Напоследок

Если вам понравилась статья и вы хотите больше подобного контента, то ставьте лайки и подписывайтесь на мой блог и социальные сети. Буду рад подискутировать в комментариях! Всем спасибо!

Twitter

Instagram

Telegram