Помогите с json [как сгруппировать пересекающиеся даты?]

Помогите, пожалуйста. решить задачу
Функция должна взять массив JSON объектов со свойствами «от» и «до» и сгруппировать его по периоду времени. Если даты в массиве пересекаются, то функция должна объединить их в один период, если разные - периоды должны быть разделены.

[
  {
    "from":"03/01/2021",
    "to":"03/05/2021"
  },
  {
    "from":"03/04/2021",
    "to":"03/10/2021"
  },
  {
    "from":"03/07/2021",
    "to":"03/20/2021"
  },
  {
    "from":"03/20/2021",
    "to":"03/30/2021"
  }
]

Output: Mar 1-30

[
  {
    "from":"03/01/2021",
    "to":"03/05/2021"
  },
  {
    "from":"03/06/2021",
    "to":"03/08/2021"
  },
  {
    "from":"03/15/2021",
    "to":"03/18/2021"
  },
  {
    "from":"03/16/2021",
    "to":"03/28/2021"
  }
]

Output: Mar 1-8, 15-28

Пока вот такой есть код

var dates = [
{
"from":"03/01/2021",
"to":"03/05/2021"
  },
  {
"from":"03/08/2021",
"to":"03/10/2021"
  },
  {
"from":"03/07/2021",
"to":"03/20/2021"
  }

   ];
var item = dates;
var index = 0;
var out = document.querySelector('#test');
for(var i = 0; i < item.length; i++){
    index++;
    var from_i = Date.parse(item[i].from);
    var to_i = Date.parse(item[i].to);
    var from_index = Date.parse(item[index].from);
    var to_index = Date.parse(item[index].to);
    if(from_index >= from_i && from_index <= to_i){
        let updated_from = new Date(from_index);
        let update_to = new Date(to_index);
        console.log(updated_from);
        out.innerHTML += updated_from.toDateString() + update_to.toDateString() + "<br/>";
    }
}
<div id="test"> </div>

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

Получается решение это поиск “пересекающихся” временных отрезков. “пересекающихся” это значит что начало следующего (С) отсортированного временного отрезка раньше чем конец (П) предыдущего. Значит, по условию задачи, их можно выразить общим временным отрезком с началом от начала (П) и концом от (С).

Примерный алгоритм:

  1. Отсортировать все объекты по стартовой дате временного отрезка.
  2. Сформировать новую структуру, пройдясь циклом по сортированной структуре по алгоритму:
    2.1. Вне цикла подготовить переменную для временного объекта куда будут аккумулироваться пересекающиеся временные отрезки. А так же массив куда будут аккумулированы пересекающиеся отрезки. Записать в нее первый временной отрезок. Цикл начать со второго временного отрезка.
    2.2. Проверить “пересекается” ли текущий временной отрезок с последующим. Иначе говоря начало следующей даты меньше чем конец текущей.
    2.2.1. Если пересекается, то обновить конец во временной структуре концом следующего отрезка.
    2.2.2 Если не пересекаются, то пушнуть в массив результатов. И в переменную для аккумуляции добавить следующий временной отрезок. Цикл продолжать для отрезка после следующего (хотя все сработает в случае если этого не сделать).