You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据指定日期字符串筛选对象数组,判断人员是否可用?

人员排班筛选与可用性判断方案

处理日期键大小写不统一的问题

你提供的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:37