Задать вопрос
@connecter

Какой принцип работы метода в данном случае?

Всем привет, требуется решить задачу, где, если одинаковые элементы идут друг за другом, их складывают
Решение ниже
Понятно все, кроме того, почему пишется a после a.push(c)
var arr = ['a','a','b','b','c','d','d','e','f'];
arr.reduce((a,c,i) => (c == arr[i-1] ? a[a.length-1]+=c : a.push(c), a), [])
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
Оператор запятая выполняет каждый из его операндов (слева направо) и возвращает значение последнего операнда.
В вашем случае последним операндом является a.

Ваш код можно переписать так:
arr.reduce((a, c, i) => {
  if (c == arr[i - 1]) {
    a[a.length - 1] += c;
  } else {
    a.push(c);
  } 
  return  a;
}, []);
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
// создаем массив со значениями
var arr = ['a','a','b','b','c','d','d','e','f'];

// перебираем все значения массива с помощью reduce (позволяет на протяжении всего перебора аккумулировать результат обработки каждого элемента)
arr.reduce(
  // методу reduce передается стрелочная функция, которая будет вызвана для каждого элемента массива
  // данная функция принимает параметры:
  // a - аккумулятор (то что вернула данная функция при ее вызове для предыдущего элемента) 
  // c - текущий элемент массива
  // i - индекс текущего элемента массива
  (a,c,i) => 
  // тело стрелочной функции (не заключено в фигурные скобки, а значит это выражение которое вернет функция)
  (
     c == arr[i-1] ? // если текущий элемент равен предыдущему
     a[a.length-1]+=c : // то добавить его к последнему элементу
     a.push(c) // иначе вставить его в конец аккумулятора
     , // читаем про оператор запятая в ответе от  @rockon404
     a // вернуть аккумулятор
  ), 
  [] // говорим методу reduce что аккумулятор у нас массив (первый элемент в качестве а получит []
)


PS: данный код бессмыслен, так как результат работы метода reduce никуда не сохраняется)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы