var a = [
  {
     day: 'Понедельник',
     start_time: '18:00',
     end_time: '21:00'
  },
 {
     day: 'Вторник',
     start_time: '18:00',
     end_time: '21:00'
  },
 {
     day: 'Среда',
     start_time: '18:30',
     end_time: '21:40'
  },
  {
     day: 'Четверг',
     start_time: '18:00',
     end_time: '21:00'
  },
]
Если вам нужно склеивать дни, которые идут друг за другом, то:
var arr = [];
for (let q of a){arr.push(q.day + ' ' + q.start_time + ' ' + q.end_time)}
arr = arr.map(w => w.split(' '));
for (var i = 0; i < arr.length-1; i++) {
	if ((arr[i][1] == arr[i+1][1]) && (arr[i][2] == arr[i+1][2])) {
		arr[i][0] += '-'+arr[i+1][0];
		arr.splice(i+1,1);
		i--;
	}
}
arr.map(w => {if(w[0].includes('-')) {return w[0]= w[0].split('-')[0] + '-' + w[0].split('-')[w[0].split('-').length-1]} else {return w[0]}}), arr = arr.map(w => w[0] + ', c ' + w[1] + ' до ' + w[2]).join('\n');
Выведет:
"Понедельник-Вторник, c 18:00 до 21:00
Среда, c 18:30 до 21:40
Четверг, c 18:00 до 21:00"
Если вообще все дни со схожими часами, то:
var arr = [];
for (let q of a){arr.push(q.day + ' ' + q.start_time + ' ' + q.end_time)}
arr = arr.map(w => w.split(' '));
for (var i = 0; i < arr.length; i++) {
	for (var q = i+1; q < arr.length; q++){
        if ((arr[i][1] == arr[q][1]) && (arr[i][2] == arr[q][2])) {
            arr[i][0] += '-'+arr[q][0];
            arr.splice(q,1);
        }
	}
}
arr = arr.map(w => w[0] + ', c ' + w[1] + ' до ' + w[2]).join('\n');
Выведет:
"Понедельник-Вторник-Четверг, c 18:00 до 21:00
Среда, c 18:30 до 21:40"