【发布时间】:2019-11-22 20:03:41
【问题描述】:
请帮我做正确的多重过滤,按城市、标签、距离过滤应该是可以的,而且每个分类有很多项,例如:
城市:莫斯科、圣彼得堡、基辅、华沙、伦敦
标签:马拉松、半程马拉松、接力
距离:7公里、22公里、100公里、42公里
您可以标记任意数量的项目以进行过滤
var events = [
{id: 0, date:"22.12.2019", name:"event1", city:"Moscow", distances:"100km", tags:[{id: 0, name: Marathon},{id: 1, name: Half Marathon}]},
{id: 1, date:"22.12.2019", name:"event2", city:"London", distances:"22km", tags:[{id: 0, name: Relay}]},
{id: 2, date:"22.12.2019", name:"event3", city:"Moscow", distances:"42km", tags:[{id: 0, name: Marathon},{id: 1, name: Relay}]},
{id: 3, date:"22.12.2019", name:"event4", city:"Kiev", distances:"100km", tags:[{id: 0, name: Marathon},{id: 1, name: Half Marathon},{id: 2, name: Эстафета}]},
{id: 4, date:"22.12.2019", name:"event5", city:"Warsaw", distances:"42km", tags:[{id: 0, name: Marathon}]},
{id: 5, date:"22.12.2019", name:"event6", city:"St. Petersburg", distances:"22km", tags:[{id: 0, name: Relay},{id: 1, name: Half Marathon}]},
{id: 6, date:"22.12.2019", name:"event7", city:"St. Petersburg", distances:"7km", tags:[{id: 0, name: Half Marathon}]},
]
如果我选择马拉松、接力、42km、100km 进行过滤,那么最好的过滤方式是什么,你可以选择不同的选项 我尝试了什么:我在过滤器的类别下创建了 3 个数组,当我点击这些项目时,我将它写到所需的数组中,然后我像这样运行它:
const { filterCity } = this.state; // array of selected filters by city
const { eventById } = this.props.Events.eventsList.events; // all events
const allEvents = (eventById === null ? [] : eventById); //data check
const filtered = allEvents.filter((events) => {
// eslint-disable-next-line no-plusplus
for (let i = 0; i < filterCity.length; i++) {
// eslint-disable-next-line no-plusplus
for (let j = 0; j < events.tags.length; j++) {
if (filterCity.indexOf(events.tags[j].name) !== -1) {
return false;
}
}
}
return true;
});
到目前为止,只是为了过滤城市,但是在这里你可以选择你想要的城市,以不同的顺序,会有规范,但我做对了吗,因为我想马上把这个功能添加到其他类别中,这样它会检查所有内容,结果是更多的内部循环,也许可以做得更好,或者请告诉我规范
附:我纯粹在 js 上使用 react 任务
【问题讨论】:
标签: javascript reactjs filter