javascript - 根据多个复选框条件过滤数组
问题描述
我正在建立一个房地产网站,用户可以在其中应用过滤器。我想要的筛选条件之一是该物业是否有阳台、屋顶露台和花园。
因此,当我只选中一个复选框(阳台)时,我想显示所有带有阳台的属性。但是当我选中两个复选框时(例如花园和阳台),我只想渲染具有这些特定品质的属性,即同时具有花园和阳台的属性。
我有一个相当复杂且难以维护的解决方案。目前我只有 3 个复选框,但如果我再添加 5 个呢?代码将变得非常低效,一切都必须重新编码。
这是我的“复杂”解决方案:
var filters = {
balcony: false,
garden: false,
roofTerrace: false
};
const checkboxFilter = plotAreaFilter.filter((item) => {
// If only Balcony is checked
if (filters.balcony && !filters.roofTerrace & !filters.garden) {
if (item.balcony) {
return true
}
}
// If both Balcony and Roof Terrace is checked
else if (filters.balcony && filters.roofTerrace & !filters.garden) {
if (item.balcony && item.roofTerrace) {
return true
}
}
// If all three Balcony, Roof Terrace and Garden is checked
else if (filters.balcony && filters.roofTerrace & filters.garden) {
if (item.balcony && item.roofTerrace && item.garden) {
return true
}
}
// If only Roof Terrace is checked
else if (!filters.balcony && filters.roofTerrace & !filters.garden) {
if (item.roofTerrace) {
return true
}
}
// If only Garden is checked
else if (!filters.balcony && !filters.roofTerrace & filters.garden) {
if (item.garden) {
return true
}
}
// If both Roof Terrace and Garden is checked
else if (!filters.balcony && filters.roofTerrace & filters.garden) {
if (item.roofTerrace && item.garden) {
return true
}
}
// If only Balcony and Garden is checked
else if (filters.balcony && !filters.roofTerrace & filters.garden) {
if (item.balcony && item.garden) {
return true
}
} else {
return true
}
})
return checkboxFilter;
我真的希望有更好的解决方案
解决方案
您可以获取条目并根据给定值检查所有条目。
var filters = { balcony: false, garden: true, roofTerrace: true },
wanted = Object.entries(filters), // [['balcony', false], ['garden', true], ['roofTerrace', true]]
checkboxFilter = plotAreaFilter.filter(item => wanted.every(([k, v]) => item[k] === v));
推荐阅读
- javascript - 如何获取生成的日历 ID 的值,然后根据其行索引将其推送到变量?
- google-apps-script - 用于将 GBK 编码转换为 UTF-8 的 Google Sheets Apps 脚本
- azure-cosmosdb - 每次系统重启时在 Mac 上设置 Cosmos-DB 模拟器
- python - 在 udp 套接字中关闭客户端时出现连接重置错误
- puppet - 使用 puppet 将 exe 安装为 Windows 服务
- google-apps-script - 移动标签页后,Google App Script onEdit 不起作用
- magento - Magento 2 升级到最新版本
- arrays - 将 Google 表格单元格内的 JSON 拆分为多行的公式
- github-api-v3 - 检查是否创建了新的拉取请求
- arrays - 如何将表格读入数组 VBA、行、列和所有表格的值