JavaScript多筛选值过滤问题:产品页两个复选框筛选无法同时生效
解决方案
问题根因
你的筛选逻辑分支冗余度过高,多条件同时生效时的判断虽然看起来逻辑自洽,但复杂的分支嵌套很容易触发意料之外的返回结果,另外当前编写的函数没有返回最终的filteredResults变量,外部无法拿到正确的筛选结果。
优化后代码
你可以把筛选逻辑改成「所有启用的筛选规则都满足才保留产品」的正向判断逻辑,可读性更高也不容易出问题:
const getFilteredSearchResults = (filters: Types.searchFilters, famData) => { return _.filter(famData, (p) => { // 前置规则:没有序列号的产品直接排除 if (typeof p["serial-number"] === "undefined") return false; // 有货筛选启用时,必须满足有货 if (filters.rentalFleetAvailability && p["availability"] === "No") return false; // 带图筛选启用时,必须满足有有效图片 if (filters.rentalFleetWithImages && (!p["photos"] || !p["photos"].length)) return false; // 所有筛选规则都通过,保留产品 return true; }); };
逻辑说明
- 所有判断都是排除逻辑:只要触发任意一条启用的筛选排除规则,就直接丢弃该产品
- 不需要额外处理多条件同时选中的分支,只要每个筛选规则的判断独立正确,多条件自然会同时生效
- 函数直接返回筛选后的结果,外部可以直接拿到处理后的数据
内容的提问来源于stack exchange,提问作者jrad09
相关产品推荐
相关产品推荐

