React InstantSearch如何在同一filter中同时过滤ongoing和all_day?
解决同时过滤多个属性的问题
嘿,这完全不是新手问题呀,很多人刚开始用数组filter的时候都会踩这个小坑~
你当前的代码问题在于,filter()方法的第二个参数是用来指定回调函数内部this的指向,而不是额外的过滤条件。所以你写的item => item.attribute !== 'ongoing', 'all_day'其实并没有把all_day作为过滤条件,而是把它当成了filter的第二个参数,这就导致只有ongoing被过滤掉了。
要同时排除ongoing和all_day这两个属性,你有两种简洁的写法:
方法1:用逻辑与(&&)组合多个不等判断
直接在回调里明确判断属性不等于这两个值:
<CurrentRefinements transformItems={items => items.filter(item => item.attribute !== 'ongoing' && item.attribute !== 'all_day' )} />
方法2:用数组includes()方法(更简洁,适合多属性场景)
把要排除的属性放进一个数组,然后判断当前属性不在这个数组里:
<CurrentRefinements transformItems={items => items.filter(item => !['ongoing', 'all_day'].includes(item.attribute) )} />
第二种方法的好处是,如果之后要排除更多属性,直接往数组里加值就行,不用写一堆&&,代码可读性更高~
内容的提问来源于stack exchange,提问作者brooksrelyt
相关产品推荐
相关产品推荐

