如何对包含嵌套数组的对象数组进行筛选,匹配指定room字段值?
你当前的代码使用了map方法,它会遍历data的所有元素并返回等长的数组,无法过滤掉不符合要求的顶层building条目,所以得不到正确结果。
正确实现如下:
const res = data.filter(buildingItem => { return buildingItem.building.some(room => userRoom.includes(room.room)) })
逻辑说明:
- 用
filter遍历顶层的data数组,只保留判断结果为true的元素 - 用
some方法校验当前building的房间列表,只要存在任意一个房间号在userRoom中,就返回true,对应的building条目就会被保留,完全匹配你给出的预期输出。
如果你后续需要同时过滤掉每个building下不匹配的房间,可以用如下写法:
const res = data // 先筛选出有匹配房间的building条目 .filter(buildingItem => buildingItem.building.some(room => userRoom.includes(room.room)) ) // 再过滤每个building下的房间列表,只保留匹配项 .map(buildingItem => ({ ...buildingItem, building: buildingItem.building.filter(room => userRoom.includes(room.room)) }))
内容的提问来源于stack exchange,提问作者user13780186
相关产品推荐
相关产品推荐

