Как можно сосчитать количество повторений одной цифры в массиве и закинуть это в другой массив

Не могу никак сделать массив с суммой последовательно попадавшихся цифр дан такой массив

      [ [0,1,0,1,0],
        [0,1,1,0,0],
        [0,1,0,0,0],
        [0,1,1,0,0],
        [0,1,0,1,0]
                ],

= [[1,1],[2],[1],[2],[1,1]] ,

то есть если единица повторяется больше 1 раза подряд то число растет , а если между ним и другой единицей 0 то пушиться в массив


Ответы (1 шт):

Автор решения: SwaD

Посчитать количество повторений подряд единиц в массиве можно так:

const init = [ [0,1,0,1,0],
  [0,1,1,0,0],
  [0,1,0,0,0],
  [0,1,1,0,0],
  [0,1,0,1,0]
];

const result = init.reduce((acc, el) => {
  let prev = 0; // Предыдущее значение
  let sum = 0; // сумма 1
  const res = []; // результат 
  el.forEach(item => { // Для каждого элемента
    if (item) { // Если не 0
      sum++; // инкрементируем сумму
    } else { // иначе
      if (prev) { // Если предыдущее не 0
        res.push(sum); // пушим
        sum = 0; // сбрасываем сумму
      }
    }
    prev = item; // текущее становится предыдущим
  });
  if (sum) { // Если вышли из цикла и сумма не 0
    res.push(sum) // Пушим
  }
  acc.push(res); // пушим в результат
  return acc; // возвращаем
}, []);

console.log(result);

→ Ссылка