如何在JavaScript中用指定数组过滤对象数组的Categoria与Empresa属性
JavaScript 对象数组多条件动态过滤方案
你可以利用数组的filter()方法结合includes()来实现动态多条件过滤,同时兼容过滤数组为空的场景(即不对该维度做限制):
基础实现
先定义动态生成的过滤数组,再编写过滤逻辑:
// 示例:动态生成的过滤数组 const filtroCategorias = ['BOCADILLOS', 'POSTRES']; const filtroEmpresas = ['PLANTA']; // 执行过滤 const datosFiltrados = data.filter(item => { // 检查Empresa是否符合过滤规则:过滤数组为空则直接通过 const validaEmpresa = filtroEmpresas.length === 0 || filtroEmpresas.includes(item.Empresa); // 检查Categoria是否符合过滤规则 const validaCategoria = filtroCategorias.length === 0 || filtroCategorias.includes(item.Categoria); // 两个条件都满足才保留当前对象 return validaEmpresa && validaCategoria; });
通用扩展方案(适配更多过滤维度)
如果后续需要增加更多过滤维度(比如Sucursal、FPago等),可以封装一个通用过滤函数,避免重复代码:
function filtrarPorMultiplesCampos(datos, filtros) { return datos.filter(item => { // 遍历所有过滤规则,确保每个非空的过滤数组都匹配当前对象对应字段 return Object.keys(filtros).every(campo => { const valoresPermitidos = filtros[campo]; return valoresPermitidos.length === 0 || valoresPermitidos.includes(item[campo]); }); }); } // 使用示例 const misFiltros = { Empresa: ['PLANTA'], Categoria: ['BOCADILLOS', 'POSTRES'], // 可随时添加其他过滤维度 // Sucursal: ['AEROPUERTO'] }; const resultadoFinal = filtrarPorMultiplesCampos(data, misFiltros);
关键说明
includes()用于检查当前对象的字段值是否在对应过滤数组中- 当过滤数组为空时,对应的条件自动返回
true,即不对该字段做过滤,完全适配动态生成的过滤规则场景
内容的提问来源于stack exchange,提问作者grem
相关产品推荐
相关产品推荐

