Метод reduce останавливается в работе перед последним элементом
У меня есть функция, убирающая идущие друг за другом одинаковые элементы, после того как метод reduce доходит до тройки в данном примере(конкретно на строчке - return previous=item), значению previous не присваивается значение item и метод заканчивает работу, не убирая тройки.
В чем может быть проблема?
function uniqueInOrder(iterable){
let arr
//Если элемент строка - преобразовывает ее в массив
if (typeof(iterable) == "string") {
arr = iterable.split('')
}else {
arr = iterable
}
//После каждого элемента создается аккумулирующее значение, равное прошлому элементу
arr.reduce(function(previous, item, index) {
if (previous!==item) {
return previous=item;
} else if (previous==item) {
arr.splice(index,1)
return previous=item;
}
},0)
return arr
}
console.log( uniqueInOrder([1,2,2,3,3]) )
Ответы (1 шт):
Автор решения: HTO HOT
→ Ссылка
Решение через reduce:
function uniqueInOrder(iterable){
let arr
if (typeof(iterable) == "string") {
arr = iterable.split('')
}else {
arr = iterable
}
///Начальное значеение у reduce будет пустой массив, далее с помощью previous.slice(-1)[0] будем получать последний элемент массива и сравнивать его со следующим элементом из arr. Если они не равны то добавляем его в конец, если они равны то ничего не делаем с аккумулирующим массивом
return arr.reduce(function(previous, item) {
if (previous.slice(-1)[0]!==item) {
return previous.concat(item)
}
return previous
},[])
}
console.log(uniqueInOrder([1,2,2,2,3,3]))
Возможно такая реализация алгоритма методом reduce вас испугает, но за-то поняв этот код, поймёте как работает метод reduce.
Вот вам в помощь изучения: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce