Javascript 检查嵌套数组中的元素

Javascript 检查嵌套数组中的元素,javascript,arrays,loops,lodash,Javascript,Arrays,Loops,Lodash,我有下面的json const data = { rooms: [ { roomId: 1, schedules: [ { home1: "06:00", dayOfWeek: 1, away: "21:30" }, { home1: "06:05", dayOfWeek: 2, away: "22:30" } ] },

我有下面的json

const data = {
    rooms: [
        {
            roomId: 1,
            schedules: [
                { home1: "06:00", dayOfWeek: 1, away: "21:30" },
                { home1: "06:05", dayOfWeek: 2, away: "22:30" }
            ]
        },
        {
            roomId: 2,
            schedules: [
                { home1: "06:00", dayOfWeek: 4, away: "21:30" },
                { home1: "06:05", dayOfWeek: 5, away: "22:30" }
            ]
        }
    ]
}
现在,我需要为dayOfWeek推送上述元素,这些元素不存在于
两个
房间的
日程表
数组中

这是我想要的输出

const finalOuput = [
    //for room 1
    { home1: "00:00", dayOfWeek: 3, away: "02:30", roomId: 1 },
    { home1: "00:00", dayOfWeek: 4, away: "02:30", roomId: 1 },
    { home1: "00:00", dayOfWeek: 5, away: "02:30", roomId: 1 },
    { home1: "00:00", dayOfWeek: 6, away: "02:30", roomId: 1 },
    { home1: "00:00", dayOfWeek: 7, away: "02:30", roomId: 1 },
    //for room 2
    { home1: "00:00", dayOfWeek: 1, away: "02:30", roomId: 2 },
    { home1: "00:00", dayOfWeek: 2, away: "02:30", roomId: 2 },
    { home1: "00:00", dayOfWeek: 3, away: "02:30", roomId: 2 },
    { home1: "00:00", dayOfWeek: 6, away: "02:30", roomId: 2 },
    { home1: "00:00", dayOfWeek: 7, away: "02:30", roomId: 2 },
]
我试过在
房间
数组上循环,类似这样

const finalOuput = []
rooms.map((room) => {
    room.schedules.map((schedule) => {
        finalOuput.push(schedule)
    })
})
但是不知道如何检查
dayOfWeek
,它们不在
房间
时间表中

有人能帮我做这个吗。谢谢你

这是代码

const数据={
房间:[
{
室友:1,
附表:[
{home1:06:00,dayOfWeek:1,away:21:30},
{home1:“06:05”,dayOfWeek:2,away:“22:30”}
]
},
{
室友:2,
附表:[
{home1:06:00,dayOfWeek:4,away:21:30},
{home1:“06:05”,dayOfWeek:5,away:“22:30”}
]
}
]
}
让输出=[]
用于(出租数据室。房间){
让天数=[]
room.schedules.map(s=>days.push(parseInt(s.dayOfWeek)))
天=新设置(天)
对于(设i=1;i以下是代码

const数据={
房间:[
{
室友:1,
附表:[
{home1:06:00,dayOfWeek:1,away:21:30},
{home1:“06:05”,dayOfWeek:2,away:“22:30”}
]
},
{
室友:2,
附表:[
{home1:06:00,dayOfWeek:4,away:21:30},
{home1:“06:05”,dayOfWeek:5,away:“22:30”}
]
}
]
}
让输出=[]
用于(出租数据室。房间){
让天数=[]
room.schedules.map(s=>days.push(parseInt(s.dayOfWeek)))
天=新设置(天)

对于(设i=1;i您可以在一周中的所有天创建一个数组,并根据您的
计划中是否存在该天进行筛选

然后映射过滤后的阵列并构建对象:

const data={rooms:[{roomId:1,日程表:[{home1:“06:00”,dayOfWeek:1,away:“21:30”},{home1:“06:05”,dayOfWeek:2,away:“22:30”},{roomId:2,日程表:[{home1:“06:00”,dayOfWeek:4,away:“21:30”},{home1:“06:05”,dayOfWeek:5,away:“22:30”}
常量天数=[1,2,3,4,5,6,7]
const template={home1:“00:00”,away:“02:30”,}
const rooms=data.rooms.reduce((arr,{roomId,schedules})=>{
//缺少的是日程中没有的日子
let missing=days.filter(day=>!schedules.find(s=>s.dayOfWeek==day))
返回arr.concat(…missing.map(d=>Object.assign({},template,{dayOfWeek:d,room:roomId})))
}, [])

console.log(rooms)
您可以在一周中的所有日子创建一个数组,并根据日程安排中是否存在该天进行筛选

然后映射过滤后的阵列并构建对象:

const data={rooms:[{roomId:1,日程表:[{home1:“06:00”,dayOfWeek:1,away:“21:30”},{home1:“06:05”,dayOfWeek:2,away:“22:30”},{roomId:2,日程表:[{home1:“06:00”,dayOfWeek:4,away:“21:30”},{home1:“06:05”,dayOfWeek:5,away:“22:30”}
常量天数=[1,2,3,4,5,6,7]
const template={home1:“00:00”,away:“02:30”,}
const rooms=data.rooms.reduce((arr,{roomId,schedules})=>{
//缺少的是日程中没有的日子
let missing=days.filter(day=>!schedules.find(s=>s.dayOfWeek==day))
返回arr.concat(…missing.map(d=>Object.assign({},template,{dayOfWeek:d,room:roomId})))
}, [])
console.log(房间)
您可以与、和结合使用

代码:

const data={rooms:[{roomId:1,日程表:[{home1:“06:00”,dayOfWeek:1,away:“21:30”},{home1:“06:05”,dayOfWeek:2,away:“22:30”},{roomId:2,日程表:[{home1:“06:00”,dayOfWeek:4,away:“21:30”},{home1:“06:05”,dayOfWeek:5,away:“22:30”}
const finalOuput=数据.房间.reduce((a,c)=>a.concat(
[1, 2, 3, 4, 5, 6, 7]
.filter(d=>!c.schedules.find(s=>s.dayOfWeek==d))
.map(可用日期=>({
室友:c.室友,
home1:‘00:00’,
星期五:有效日期:,
客场:“02:30”
}))
), []);
console.log(最终输出);
.as控制台包装{max height:100%!important;top:0;}
您可以与、和组合使用

代码:

const data={rooms:[{roomId:1,日程表:[{home1:“06:00”,dayOfWeek:1,away:“21:30”},{home1:“06:05”,dayOfWeek:2,away:“22:30”},{roomId:2,日程表:[{home1:“06:00”,dayOfWeek:4,away:“21:30”},{home1:“06:05”,dayOfWeek:5,away:“22:30”}
const finalOuput=数据.房间.reduce((a,c)=>a.concat(
[1, 2, 3, 4, 5, 6, 7]
.filter(d=>!c.schedules.find(s=>s.dayOfWeek==d))
.map(可用日期=>({
室友:c.室友,
home1:‘00:00’,
星期五:有效日期:,
客场:“02:30”
}))
), []);
console.log(最终输出);

.as控制台包装{最大高度:100%!重要;顶部:0;}
ES6唯一解决方案

const data={rooms:[{roomId:1,日程表:[{home1:“06:00”,dayOfWeek:1,away:“21:30”,roomId:1},{home1:“06:05”,dayOfWeek:2,away:“22:30”,roomId:1},{roomId:2,away:“21:30”,roomId:2},{home1 06:05,dayOfWeek:5,away:“22:30”,roomId:2}
const getSchedules=(房间)=>{
让工作日=[…数组(8).keys()]
工作日轮班
let days=weekDays.filter(x=>!room.schedules.some(y=>y.dayOfWeek==x))
return days.map(y=>({home1:“00:00”,dayOfWeek:y,away:“02:30”,roomId:room.roomId}))
}

console.log(data.rooms.reduce((r,c)=>(r.push(…getSchedules(c)),r),[]))
仅ES6解决方案

const data={rooms:[{roomId:1,日程安排:[{home1:“06:00”,周日:1,远离:“21:30”,roomId:1},{home1:“06:05”,周日:2,aw