Перебор вложенных массивов и подсчет одинаковых значений первых элементов вложенных массивов. Застрял :(

Всем добрый день!
Застрял с задачей :( Понимаю что откровенно туплю, но я не большой спец в JS, поэтому не понимаю что не так.
Важный момент: код должен соответствовать ES4.
Есть массив с вложенными массивами строк (привожу фрагмент):

var bigArray = [
    ["02.01.01.02.Формирование программы","Ответственный за формирование Программы ","Формирование/ Корректировка  Программы ","Исполнитель"],
    ["02.01.01.02. Формирование программы","Ответственный за формирование Программы","Проведение совещания по рассмотрению и утверждению Программы","Консультант"],
    ["02.01.01.04. Корректировка годовой инвестиционной программы","Куратор статьи ИП","Формирование комментариев  по отклонениям ИП","Исполнитель"],
    ["02.01.01.05. Разработка квартальных инвестиционных программ","Куратор статьи ИП","Формирование плана на  следующий квартал","Исполнитель"],
    ["02.01.01.05. Разработка квартальных инвестиционных программ","Куратор статьи ИП","Консолидация проекта  квартального плана","Консультант"],
    ["02.01.02.02. Мониторинг инвестиционной программы","Куратор статьи ИП","Проведение  ежеквартального мониторинга","Консультант"],
    ["02.01.02.02. Мониторинг инвестиционной программы","Куратор статьи ИП","Формирование месячного отчета по  фактическому исполнению  по направлению","Исполнитель"],
    ["02.01.02.02. Мониторинг инвестиционной программы","Куратор статьи ИП","Проведение анализа  изменений лимитов инвестиций","Консультант"],
    ["02.01.02.02. Мониторинг инвестиционной программы","Куратор статьи ИП","Проведение анализа  изменения объемных  показателей за год","Консультант"]];

Нужно перебирая массив подсчитывать количество равных первых элементов вложенных массивов, после нахождения полной серии равных элементов выдавать (в данном примере для простоты - выводить) значение счетчика, обнулять счетчик, искать следующую серию и так до конца массива. Количество серий, их длина - непостоянные.

Я пока придумал такое:

var bigArray = [
  ["02.01.01.02.Формирование программы", "Ответственный за формирование Программы ", "Формирование/ Корректировка  Программы ", "Исполнитель"],
  ["02.01.01.02. Формирование программы", "Ответственный за формирование Программы", "Проведение совещания по рассмотрению и утверждению Программы", "Консультант"],
  ["02.01.01.04. Корректировка годовой инвестиционной программы", "Куратор статьи ИП", "Формирование комментариев  по отклонениям ИП", "Исполнитель"],
  ["02.01.01.05. Разработка квартальных инвестиционных программ", "Куратор статьи ИП", "Формирование плана на  следующий квартал", "Исполнитель"],
  ["02.01.01.05. Разработка квартальных инвестиционных программ", "Куратор статьи ИП", "Консолидация проекта  квартального плана", "Консультант"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Проведение  ежеквартального мониторинга", "Консультант"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Формирование месячного отчета по  фактическому исполнению  по направлению", "Исполнитель"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Проведение анализа  изменений лимитов инвестиций", "Консультант"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Проведение анализа  изменения объемных  показателей за год", "Консультант"]
];

var k = 0;
for (var i = 0; i < bigArray.length; i++) {
  if ((i == bigArray.length - 1) && (bigArray[i][0] == bigArray[i + 1][0])) {
    k++;
    console.log("Найдена серия длиной: " + k);
    break;
  } else if ((i == bigArray.length - 1) && (bigArray[i][0] != bigArray[i + 1][0])) {
    k = 1;
    console.log("Найдена серия длиной: " + k);
    break;
  } else if (bigArray[i][0] == bigArray[i + 1][0]) {
    k++;
  } else {
    k++;
    console.log("Найдена серия длиной: " + k);
    k = 0;
  }
}

Но, во-первых, скрипт при дохождении до последнего вложенного массива выпадает в ошибку "Cannot read properties of undefined (reading '0')" и я пока не понимаю почему, а во-вторых есть четкое ощущение что есть более лаконичный и красивый вариант этого кода. Ожидаемый результат для приведенного в качестве примера фрагмента массива:

Найдена серия длиной: 2
Найдена серия длиной: 1
Найдена серия длиной: 2
Найдена серия длиной: 4

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

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

Вы наверняка ожидаете чего-то такого.

Все вроде соответствует стандарту ES4.

var bigArray = [
  ["02.01.01.02.Формирование программы", "Ответственный за формирование Программы ", "Формирование/ Корректировка  Программы ", "Исполнитель"],
  ["02.01.01.02.Формирование программы", "Ответственный за формирование Программы", "Проведение совещания по рассмотрению и утверждению Программы", "Консультант"],
  ["02.01.01.04. Корректировка годовой инвестиционной программы", "Куратор статьи ИП", "Формирование комментариев  по отклонениям ИП", "Исполнитель"],
  ["02.01.01.05. Разработка квартальных инвестиционных программ", "Куратор статьи ИП", "Формирование плана на  следующий квартал", "Исполнитель"],
  ["02.01.01.05. Разработка квартальных инвестиционных программ", "Куратор статьи ИП", "Консолидация проекта  квартального плана", "Консультант"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Проведение  ежеквартального мониторинга", "Консультант"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Формирование месячного отчета по  фактическому исполнению  по направлению", "Исполнитель"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Проведение анализа  изменений лимитов инвестиций", "Консультант"],
  ["02.01.02.02. Мониторинг инвестиционной программы", "Куратор статьи ИП", "Проведение анализа  изменения объемных  показателей за год", "Консультант"]
];

function count(array) {
  var counter = 1;
  for (var i = 0; i < array.length - 1; i++) {
    if (array[i][0] == array[i + 1][0]) {
      counter++;
      continue;
    }
    console.log("Найдена серия длиной: " + (counter));
    counter = 1;
  }
  console.log("Найдена серия длиной: " + (counter))
}

count(bigArray);

→ Ссылка