Reputation: 27
i have a problem for group my object of day, i tested a lot of method but without success i don't know if i can do this with lodash or underscorejs. I have been stuck on it for several days if someone can help me pls. Anyone knows a solution for this?
const schedules = {
Friday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Monday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Saturday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "20:30"},
{afternoonClose: "20:30"}
]
Sunday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "20:30"},
{afternoonClose: "20:30"}
],
Thursday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Tuesday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Wednesday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
];
and i want this for list my days
schedules1 : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"},
{days: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
],
schedule2 : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "20:30"},
{afternoonClose: "20:30"},
{days: ["Sunday", "Saturday"]
];
Thanks
Upvotes: 2
Views: 82
Reputation: 1800
const schedules = {
Friday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "18:30",
afternoonClose: "18:30"
},
Monday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "18:30",
afternoonClose: "18:30"
},
Saturday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "20:30",
afternoonClose: "20:30"
},
Sunday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "20:30",
afternoonClose: "20:30"
},
Thursday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "18:30",
afternoonClose: "18:30"
},
Tuesday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "18:30",
afternoonClose: "18:30"
},
Wednesday: {
isOpen: true,
morningOpen: "08:30",
morningClose: "12:00",
afternoonOpen: "18:30",
afternoonClose: "18:30"
},
}
const groups = []
function getOrCreateGroup(schedule) {
for (const group of groups) {
if (
group.isOpen === schedule.isOpen &&
group.morningOpen === schedule.morningOpen &&
group.morningClose === schedule.morningClose &&
group.afternoonOpen === schedule.afternoonOpen &&
group.afternoonClose === schedule.afternoonClose
) {
return group
}
}
const newGroup = {
...schedule,
days: [],
}
groups.push(newGroup)
return newGroup
}
for (const key in schedules) {
const schedule = schedules[key]
const group = getOrCreateGroup(schedule)
group.days.push(key)
}
console.log(groups)
Upvotes: 1
Reputation: 5030
With the help of lodash, I used _.isEqual and _.isEqual
see: https://lodash.com/docs/4.17.15#isEqual https://lodash.com/docs/4.17.15#isEqual
I also added schedules3 in case.
const schedules = {
Friday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Monday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Saturday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "20:30"},
{afternoonClose: "20:30"}
],
Sunday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "20:30"},
{afternoonClose: "20:30"}
],
Thursday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Tuesday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
],
Wednesday : [
{isOpen: true},
{morningOpen: "08:30"},
{morningClose: "12:00"},
{afternoonOpen: "18:30"},
{afternoonClose: "18:30"}
]
};
var schedules1= schedules.Friday;
var schedules2= {};
var schedules3= {};
var schedules1_days = [];
var schedules2_days = [];
var schedules3_days = [];
for (const [key, currentObj] of Object.entries(schedules)) {
if(_.isEqual(currentObj,schedules1)){
schedules1_days.push(key);
}else if(_.isEqual(currentObj,schedules2)){
schedules2_days.push(key);
}else if(_.isEqual(currentObj,schedules3)){
schedules3_days.push(key);
}else{
if(_.isEmpty(schedules2)){
schedules2 = currentObj;
schedules2_days.push(key);
}else if(_.isEmpty(schedules3)){
schedules3 = currentObj;
schedules3_days.push(key);
}
}
}
schedules1 = {...schedules1, days: schedules1_days};
schedules2 = {...schedules2, days: schedules2_days};
if(!_.isEmpty(schedules3)){
schedules3 = {...schedules3, days: schedules3_days};
}
console.log(schedules1);
console.log(schedules2);
console.log(schedules3);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
Upvotes: 0