logicface
@logicface
Начинающий

Метод push() внутри reduce() ругается на undefined внутри себя, как исправить?

Всем привет. Я сравниваю этот элемент массива со следующим и если сравнение дает true, то пушу значение в аккумулирующую переменную. Я понимаю, что когда-то будет сравнение последнего элемента массива с элементом массива + 1, где будет значение undefined. Вроде я это отфильтровал, но все равно не работает. Если вместо reduce использовать forEach и внешнюю аккумулирующий массив, то все работает. Подскажите как правильно это написать используя reduce() и в чем ошибка.
Этот кода не работает:
var uniqueInOrder = function (iterable) {
  return iterable.reduce((acc, item, index) => {
    if (item != iterable[index + 1]) {
      acc.push(item);
      return acc;
    }
  }, []);
};

console.log(uniqueInOrder([1, 1, 2, 3, 3, 3, 4]));

Этот код работает:
var uniqueInOrder = function (iterable) {
  let result = [];
  iterable.forEach((item, index) => {
    if (item != iterable[index + 1]) {
      result.push(item);
    }
  });
  return result;
};

console.log(uniqueInOrder([1, 1, 2, 3, 3, 3, 4]));
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
var uniqueInOrder = function (iterable) {
  return iterable.reduce((acc, item, index) => {
    if (item != iterable[index + 1]) {
      acc.push(item);
    }

    return acc;
  }, []);
};

console.log(uniqueInOrder([1, 1, 2, 3, 3, 3, 4]));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы