Сравнение соседних элементов массива
Задача такая, я получаю либо строку, либо массив символов. Мне нужно удалить соседний элемент, если они идентичны. Пример: input = 'aahhjdFFGHf' => output = ['a', 'h', 'j', 'd', 'F', 'G', 'H', 'a']; input = [1, 3, 3, 5, 6, 6, 3, 5, 5] => output = [1, 3, 5, 6, 3, 5]. Ниже пример моего кода, но он возвращает либо пустой массив, либо только первый элемент
var uniqueInOrder=function(iterable){
if (typeof iterable == 'object') {
return iterable.filter((el, i) => el[i] !== el[i+1])
} else {return iterable.split('').filter((el, i) => el[i] !== el[i+1])}
}
Ответы (1 шт):
Как верно заметил @NNL993, всё дело в переменных и индексах в выражениях el[i] !== el[i+1].
Переменная el содержит лишь один символ, применять к ней индексы не нужно.
В вашем коде эти выражения нужно заменить на el !== iterable[i+1], т.е. очередной символ el нужно сравнивать со следующим символом, который извлекается из массива: iterable[i+1].
Ниже немного укороченный код.
var uniqueInOrder = function (iterable) {
return (typeof iterable == 'object' ? iterable : iterable.split('')).
filter((el, i, arr) => el !== arr[i + 1])
}
// тест
Array('aahhjdFFGHf', [1, 3, 3, 5, 6, 6, 3, 5, 5]).
forEach(el => console.log(uniqueInOrder(el)));