如何基于城市与市场双重条件过滤嵌套pages对象数组?
如何同时基于城市和市场过滤Pages数组?
我已经实现了基于单个城市(如/rome/)过滤pages数组的逻辑,能返回包含该城市的所有页面。现在需要实现同时匹配指定城市及该城市下指定市场的过滤逻辑,仅返回包含指定城市且该城市下存在指定市场的页面。
示例Pages数组
const pages = [ { id: 1, name: 'Meals', startDate: '2022-11-09 10:32:00', endDate: '2022-11-16 10:32:00', cities: { rome: ['supermarket'], }, }, { id: 2, name: 'Deals', startDate: '2022-11-24 11:01:00', endDate: '2022-12-01 11:01:00', cities: { napoli: ['supermarket', 'minimarket'], rome: ['supermarket'], }, }, { id: 3, name: 'Toys', startDate: '2022-11-24 11:01:00', endDate: '2022-12-01 11:01:00', cities: { rome: ['minimarket'], venice: ['supermarket', 'minimarket'], }, } ];
已实现的城市过滤代码
const city = 'rome'; const pagesFilterCity = pages.filter((item) => { return item.cities.hasOwnProperty(city); });
问题:尝试的市场过滤逻辑不符合需求
我写的这段代码会遍历所有城市的所有市场,无法关联指定城市和对应的市场,比如会错误地把id=3的页面筛选出来(虽然venice有supermarket,但rome下并没有):
const market = 'supermarket'; const pagesFilterMarket = pages.filter((item) => { return Object.values(item.cities) .flat() .some((item) => item === market); });
正确的过滤逻辑
需要同时满足两个条件:
- 页面的
cities对象包含指定城市 - 该城市对应的市场数组包含目标市场
实现代码如下:
const city = 'rome'; const market = 'supermarket'; const filteredPages = pages.filter(item => { // 先确认存在指定城市,再检查该城市下的市场列表 return item.cities.hasOwnProperty(city) && item.cities[city].includes(market); });
期望输出结果
过滤/rome/supermarket/后,应得到以下结果:
[ { id: 1, name: 'Meals', startDate: '2022-11-09 10:32:00', endDate: '2022-11-16 10:32:00', cities: { rome: ['supermarket'], }, }, { id: 2, name: 'Deals', startDate: '2022-11-24 11:01:00', endDate: '2022-12-01 11:01:00', cities: { napoli: ['supermarket', 'minimarket'], rome: ['supermarket'], }, } ]
内容的提问来源于stack exchange,提问作者karagkalex
相关产品推荐
相关产品推荐

