如何根据指定日期字符串筛选对象数组,判断人员是否可用?
人员排班筛选与可用性判断方案
处理日期键大小写不统一的问题
你提供的workSchedule里日期键大小写不一致(比如monday全小写,Friday首字母大写),而输入的day是'Monday',得先做格式统一,确保能精准匹配到对应的日期键。我们可以通过忽略大小写的方式匹配键名。
单个人员的可用性判断
比如要查人员a在Monday是否可用:
// 先找到人员a的信息 const personA = workSchedule.find(p => p.name === 'a'); // 忽略大小写匹配日期键 const targetDay = Object.keys(personA.workDays).find(key => key.toLowerCase() === day.toLowerCase()); // 拿到可用性状态,没找到对应日期的话默认不可用 const isA_Available = targetDay ? personA.workDays[targetDay].isavailable : false; console.log(`人员a在${day}是否可用:${isA_Available}`); // 输出:人员a在Monday是否可用:true
查人员b的话逻辑一样:
const personB = workSchedule.find(p => p.name === 'b'); const targetDayB = Object.keys(personB.workDays).find(key => key.toLowerCase() === day.toLowerCase()); const isB_Available = targetDayB ? personB.workDays[targetDayB].isavailable : false; console.log(`人员b在${day}是否可用:${isB_Available}`); // 输出:人员b在Monday是否可用:false
筛选指定日期可用的人员数组
用Array.filter就能直接完成筛选,结合日期键的匹配逻辑:
const availablePeople = workSchedule.filter(person => { const targetDayKey = Object.keys(person.workDays).find(key => key.toLowerCase() === day.toLowerCase()); // 找到对应日期且isavailable为true的人员才保留 return targetDayKey && person.workDays[targetDayKey].isavailable; }); console.log(availablePeople); // 最终输出:[{ name: 'a', age: 21, workDays: { monday: { isavailable: true }, tuesday: { isavailable: false }, wednesday: { isavailable: true }, thursday: { isavailable: true }, Friday: { isavailable: false } } }]
简化写法(日期键格式统一时用)
如果后续能保证workDays的日期键和day格式完全一致(比如都用全小写),可以直接简化代码:
const normalizedDay = day.toLowerCase(); const availablePeople = workSchedule.filter(person => person.workDays[normalizedDay]?.isavailable);
内容的提问来源于stack exchange,提问作者fallen1202
相关产品推荐
相关产品推荐

