Сравнивайте каждый элемент только с последним добавленным. При отличии добавляйте его в новый массив; одинаковые значения через промежуток должны сохраниться.
Функция, формирующая массив без подряд идущих одинаковых элементов
Сравнивайте каждый элемент только с последним добавленным. При отличии добавляйте его в новый массив; одинаковые значения через промежуток должны сохраниться.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, принимающую на вход произвольную последовательность (строку или массив) и возвращающую новый массив, в котором соседние одинаковые значения удалены, а порядок остальных элементов сохраняется.
// ПРИМЕР:
// 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 идёт по кодовым точкам.