JavaScript如何根据指定日期值过滤包含嵌套数组的对象数组
嵌套数组日期过滤解决方案
问题根因
你编写的过滤代码未生效,核心原因是appointments和dates均为数组类型,无法直接通过链式访问.dates/.date属性读取数组内对象的字段,且未对内层数组做裁剪处理,无法实现「仅保留匹配日期项」的需求。
可行实现代码
const chosenDate = "2021-09-13"; const filteredBranches = branches .map(branch => { // 深拷贝分支避免修改原数组,若允许修改原数组可删除该行 const processedBranch = JSON.parse(JSON.stringify(branch)); // 处理预约列表,过滤匹配日期 processedBranch.appointments = processedBranch.appointments .map(appointment => { // 仅保留当前预约下符合日期要求的项 appointment.dates = appointment.dates.filter(dateItem => dateItem.date === chosenDate); return appointment; }) // 过滤掉无匹配日期的预约 .filter(appointment => appointment.dates.length > 0); return processedBranch; }) // 过滤掉无符合条件预约的医院分支 .filter(branch => branch.appointments.length > 0); console.log(filteredBranches);
逻辑说明
- 先遍历所有医院分支,对每个分支的嵌套结构逐层处理
- 对内层
dates数组做过滤,只保留日期等于目标值的项 - 裁剪掉
dates为空的预约项,再裁剪掉无有效预约的医院分支 - 增加深拷贝逻辑是为了避免修改原始
branches数组,若业务场景允许修改原数据可删除深拷贝代码降低性能消耗。
内容的提问来源于stack exchange,提问作者ChrisD
相关产品推荐
相关产品推荐

