@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 просмотров
Решения вопроса 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 никуда не сохраняется)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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