javascript - 使用 es6 构建多维数组过滤器
问题描述
如屏幕截图所示,我试图构建一个过滤器逻辑,但由于其他原因无法在后端/sql 中处理。
我正在获取产品数据,并且过滤器必须彼此相加。为了实现按 1 个属性 id 过滤(例如按品牌 id 或类别 id 过滤),我构建了这样的功能:
multiFilter (arr, filters) {
const filterKeys = Object.keys(filters);
return arr.filter(eachObj => {
return filterKeys.every(eachKey => {
if (!filters[eachKey].length) {
return true;
}
return filters[eachKey].includes(eachObj[eachKey].id);
});
});
}
- 参数 arr 是 Product 数组
参数过滤器是过滤器处于活动状态的信息。例如:
{ "brands" : [4,6,8], "categorys" : [7,2,4,5], "additives" : [1,2,3,4,6,8,9,54,32,12] }
只要在产品的一个级别上按品牌 id 或类别 id 过滤,它就可以工作。
我现在要做的是,例如通过添加剂额外过滤产品,正如您在我的屏幕截图中看到的那样,它们更深一层。任何想法如何实现这一目标?
谢谢
解决方案
答案是:
multiFilter (arr, filters) {
const filterKeys = Object.keys(filters);
return arr.filter(eachObj => {
return filterKeys.every(eachKey => {
if (!filters[eachKey].length) {
return true;
}
if(eachObj[eachKey].id) {
return filters[eachKey].includes(eachObj[eachKey].id );
} else {
return filters[eachKey].some(f => eachObj[eachKey].some(v => v.id === f));
}
});
});
}
---->
return filters[eachKey].some(f => eachObj[eachKey].some(v => v.id === f));
推荐阅读
- json - XQuery 如何计算 JSON 中的所有“咒语”
- bash - 使用 fzf 从目录中查找并执行程序
- python - Tensorflow-gpu 仅使用 1.14 版本训练自定义对象检测模型
- sql - 使用 spring JdbcTemplate 是否会创建到 sql server 的新连接?
- rust - 使用强制转换的可变访问器是否安全?
- javascript - 多个(2)拖放JQuery
- terminal - 当我尝试安装 Homebrew 时,为什么终端提示要求输入密码?
- java - 在移动设备和可穿戴设备上保存表盘设置
- php - Goutte - 从 $crawler->filter() 获取内部值
- php - 如何将 2 个表格总结为 1 个表格