Функция, формирующая массив без подряд идущих одинаковых элементов

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

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

// ПРИМЕР:
// func('AAAABBBCCDAABBB') => ['A', 'B', 'C', 'D', 'A', 'B']
// func('ABBCcAD') => ['A', 'B', 'C', 'c', 'A', 'D']
// func([1,2,2,3,3]) => [1,2,3]

function uniqueSequence(str) {}

Ответ

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

function uniqueSequence(sequence) {
  const result = [];
  for (const value of sequence) {
    if (!result.length || result[result.length - 1] !== value) result.push(value);
  }
  return result;
}

Строка 'AAAABBBCCDAABBB' превращается в ['A','B','C','D','A','B'], а не в множество уникальных букв. Регистр учитывается. Используется ===-семантика: NaN останется повторно, объекты сравниваются по ссылке. Время O(n), память до O(n); строковый for...of идёт по кодовым точкам.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее