You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:10:19