Javascript 合并所有房间的可用时间段

Javascript 合并所有房间的可用时间段,javascript,Javascript,假设我有三个房间,分别有单独的可用时间段和总时间段 总时隙: ["09:00-10:00","10:00-11:00", "11:00-12:00", "12:00-13:00", "13:00-14:00", "14:00-15:00"] Room1可供 [ "10:00-11:00", "11:00-12:00", "12:00-13:00"] Room2可供 [ "11:00-12:00", "12:00-13:00", "13:00-14:00"] [ "12:00-13:0

假设我有三个房间,分别有单独的可用时间段和总时间段

总时隙:

["09:00-10:00","10:00-11:00", "11:00-12:00",  "12:00-13:00", "13:00-14:00", "14:00-15:00"]
Room1可供

[ "10:00-11:00", "11:00-12:00",  "12:00-13:00"]
Room2可供

[ "11:00-12:00",  "12:00-13:00", "13:00-14:00"]
[ "12:00-13:00", "13:00-14:00", "14:00-15:00"]
Room3可供

[ "11:00-12:00",  "12:00-13:00", "13:00-14:00"]
[ "12:00-13:00", "13:00-14:00", "14:00-15:00"]
我想用房间号过滤掉可用的时间段,所以我希望我的输出是这样的

[{
    slot: "09:00-10:00",
    available: false,
    space : []
},{
    slot: "10:00-11:00",
    available: true,
    space : ["room1"]
},{
    slot: "11:00-12:00",
    available: true,
    space : ["room1", "room2"]
},{
    slot: "12:00-13:00",
    available: true,
    space : ["room1", "room2", "room3"]
},{
    slot: "13:00-14:00",
    available: true,
    space : ["room2", "room3"]
},{
    slot: "14:00-15:00",
    available: true,
    space : ["room3"]
}]
我尝试的是:

const ts=['10:00-10:30','10:30-11:00','11:00-11:30','11:30-12:00','12:00-12:30','12:30-13:00','13:00-13:30','13:30-14:00','14:30-15:00','15:30-16:00'];
const room1=[“11:00-11:30”,“13:05-13:35”,“14:05-14:15”];
const avail=(ts,预订)=>
ts.map(项目=>{
常量[开始,结束]=项拆分('-');
常数已预订
.map(item=>item.split('-'))
.some([bookedStart,bookedEnd])=>
(开始>=bookedStart&&startbookedStart&&end=start&&bookedStart
。作为控制台包装器{
最低高度:100%

}
我已经尽了最大努力使它可行。请检查是否符合您的要求

const ts=['10:00-10:30','10:30-11:00','11:00-11:30','11:30-12:00','12:00-12:30','12:30-13:00','13:00-13:30','13:30-14:00','14:30-14:30','14:30-15:30','15:30-16:00'];
let rooms={“room100”:[“11:00-11:30”、“13:05-13:35”、“14:05-14:15”]、“room200”:[“11:00-12:00”、“12:00-13:00”、“13:00-14:00”]、“room300”:[“12:00-13:00”、“13:00-14:00”、“14:00-15:00”];
var final=[];
const avail=(ts,房间)=>
ts.map(项目=>{
常量[开始,结束]=项拆分('-');
让插槽=[];
用于(房间内的var钥匙)
{
let Aviable=房间[钥匙]
.map(item=>item.split('-'))
.some([bookedStart,bookedEnd])=>
(开始>=bookedStart&&startbookedStart&&end=start&&bookedStart0?真:假;
final.push({“slot”:`${start}-${end}`,“available”:isBooked,“space”:slot})
//log(`${start}-${end}`,已预订,插槽);
})
效用(ts、房间);
console.log(最终版)

.as console wrapper{min height:100%}
您可以使用
过滤器
对象.entries
(假设您有一个
房间
对象)。其思想是,对于
ts
数组中的每个时隙,您都希望找到(
filter
)在该时隙中具有可用性的房间

我还建议抽象用于检查某个时间段是否与另一个函数的时间段重叠的逻辑,以便您可以单独测试它:

const ts=['10:00-10:30','10:30-11:00','11:00-11:30','11:30-12:00','12:00-12:30','12:30-13:00','13:00-13:30','13:30-14:00','14:30-14:30','14:30-15:30','15:30-16:00'];
施工室={
“room1”:[“11:00-11:30”,“13:05-13:35”,“14:05-14:15”],
“room2”:[“11:00-12:00”,“12:00-13:00”,“13:00-14:00”],
“room3”:[“12:00-13:00”,“13:00-14:00”,“14:00-15:00”]
};
常量重叠=(插槽、预订)=>{
const[start,end]=插槽分割('-');
const[bookedStart,bookedd]=booking.split('-');
返回(开始>=bookedStart&&startbookedStart&&end=start&&bookedStart{
常量空间=对象。条目(房间)
.filter(([\ux,Availableslot])=>Availableslot.some(roomSlot=>overlaps(slot,roomSlot)))
.map(([room,])=>room);
返回{slot,space,available:space.length>0};
});

控制台日志(res)您可以使用一些嵌套的迭代结构,并检查想要的插槽中是否有可用的房间

var slots=['10:00-11:00',
'10:15-11:15',
'10:30-11:30',
'10:45-11:45',
'11:00-12:00' ],
房间={'5d396fd3f0315c3f56b255d4-5d396fe2f0315c3f56b25a79':[],
'5d396fa0f0315c3f56b245d6':['11:00-12:00']},
roomEntries=对象。条目(房间),
结果=slot.map(slot=>{
var[sStart,sEnd]=slot.split('-'),
空格=房间条目
.filter(([room,a])=>a.some(可用=>{
var[aStart,aEnd]=available.split('-');
返回(sStart>=aStart&&sEnd=aEnd);
}))
.map(([k])=>k);
返回{插槽,可用:!!space.length,space};
});
控制台日志(结果)

。作为控制台包装器{max height:100%!important;top:0;}
您尝试过这个问题吗?如果是,请添加代码。@shrys当然,我会edit@ShivaniPateladdedcode代码段未打印输出。你能查一下吗。。谢谢你的帮助。对不起,我弄错了,请你现在检查一下好吗。让我检查一下所有的场景。感谢您的帮助
[…slot,“room”+i]
您在代码中保留了这一行,它将占用0号房间,即0号房间、1号房间等。但是如果我的房间是从5号房间、6号房间开始的,或者可能是001号、002号房间(即001号房间用于1号房间,002号房间用于2号房间),则该操作将失败。因此,您可以在
let rooms
@Dweep Welcome:)中使用对象而不是数组,非常感谢。很好。你能帮我吗?你好,如果你使用
var插槽=['10:00-11:00','10:15-11:15','10:30-11:30','10:45-11:45','11:00-12:00'],房间={'5d394eab1b9c1d0ccda073fd':['10:00-11:00','5d396fa0f0315c3f56b245d6':['10:00-11:00','10:15-11:15','10:30-11:00'],'5d396fc8f0315c3f56b251f0':['10:00-11:00','10:15-11:15','10:30-11:30','10:45-11:45','11:00-12:00']}
此输入将提供错误的输出。您好,很抱歉打扰您,但是您能帮我检查一下吗?您能检查并纠正上面的错误吗