Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

106
Vistas
¿Cómo filtrar una matriz de objetos por otro objeto como clave en JS?

Tengo una variedad de objetos.

 let allData = [ {title:"Adams",age:24,gender:"male"}, {title:"Baker",age:24,gender:"female"}, {title:"Clark",age:23,gender:"male"}, {title:"Davis",age:23,gender:"female"}, {title:"Ghosh",age:23,gender:"female"}, {title:"Adams",age:23,gender:"male"}, {title:"Irwin",age:25,gender:"male"}, ]

y lista de filtros en un objeto como este

 let filters = { title:{filterTerm:[]}, gender:{filterTerm:["male"]}, age:{filterTerm:[23]} }

Quiero aplicar varios filtros encima de todos los datos. Intenté usar Array.some con Array.includes, pero no funciona cuando con varios elementos de filtros a continuación está mi código.

 const getFilterRows = (rows, filters) => { let filterCols = Object.keys(filters) if (filterCols.length == 0) { return rows } else { let filteredR = rows.filter(i => { return filterCols.some((s) => { return filters[s].filterTerm.includes(i[s]) }) }); return filteredR } }
 let filterd = getFilterRows(allData,filters)

Rendimiento esperado

 [ {title:"Clark",age:23,gender:"male"}, {title:"Adams",age:23,gender:"male"}, ]
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Puede asignar cada clave de los filters y filtrar todos los datos en filterTerm allData el elemento que se busca, ignorando el filtro si filterTerm está vacío. El siguiente ejemplo también le permitiría agregar más elementos a filterTerm si es necesario.

 let allData = [ {title:"Adams",age:24,gender:"male"}, {title:"Baker",age:24,gender:"female"}, {title:"Clark",age:23,gender:"male"}, {title:"Davis",age:23,gender:"female"}, {title:"Ghosh",age:23,gender:"female"}, {title:"Adams",age:23,gender:"male"}, {title:"Irwin",age:25,gender:"male"} ] let filters = { title:{filterTerm:[]}, gender:{filterTerm:["male"]}, age:{filterTerm:[23]}, } const getFilterRows = (rows, filters) => { return rows.filter(row => ( Object.keys(filters) .map(key => filters[key].filterTerm.length ? filters[key].filterTerm.includes(row[key]) : true) .every(Boolean)) ) } let filtered = getFilterRows(allData,filters) console.log(filtered)

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda