JSFiddle - React, Tailwind, and code Playground
by Dmitry Ieremenko
HTML
<div class="root">
</div>
JavaScript
const schedule = {
"monday": {
"order_before": 900,
"day_off": false,
"days_before_order": 1,
"is_relative": false
},
"tuesday": {
"order_before": 900,
"day_off": false,
"days_before_order": 1,
"is_relative": false
},
"wednesday": {
"order_before": 900,
"day_off": false,
"days_before_order": 1,
"is_relative": false
},
"thursday": {
"order_before": 900,
"day_off": false,
"days_before_order": 1,
"is_relative": false
},
"friday": {
"order_before": 900,
"day_off": false,
"days_before_order": 1,
"is_relative": false
},
"saturday": {
"order_before": 780,
"day_off": false,
"days_before_order": 1,
"is_relative": false
},
"sunday": {
"order_before": 780,
"day_off": true,
"days_before_order": 1,
"is_relative": false
}
};
const result = [];
let valueStr = '';
let dayStart = null;
let dayEnd = null;
const days = Object.keys(schedule);
days.forEach((day, index) => {
const { order_before: before, days_before_order: daysBefore, day_off: dayOff } = schedule[day];
const val = `Before ${before}, ${daysBefore} day(s) before`;
console.log(val, valueStr, dayStart, dayEnd);
if (val !== valueStr || dayOff) {
if (dayStart) {
result.push(`For ${dayStart}${dayEnd ? ` - ${dayEnd}` : ''}: ${valueStr}`);
}
dayEnd = null;
if (dayOff) {
result.push(`${day}: Closed`);
dayStart = null;
valueStr = '';
} else if (index === days.length - 1) {
result.push(val);
} else {
dayStart = day;
valueStr = val;
}
} else {
dayEnd = day;
}
});
console.log(result);