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

107
Vistas
lista de filtrado por múltiples condiciones

hay una lista de usuarios

 filterData = [ { "position":"lawyer", "department_positions":[], "group_positions":[ {"group":{"id":2,"code":"234","name":"group1"},"lead":false}, {"group":{"id":1,"code":"123","name":"group12"},"lead":true} ] }, { "position":"director", "department_positions":[ {"department":{"id":3,"code":"333","name":"subDep"},"lead":false} ], "group_positions":[ {"group":{"id":2,"code":"234","name":"group1"},"lead":false}, {"group":{"id":1,"code":"123","name":"group12"},"lead":true} ] }, { "position":"director", "department_positions":[], "group_positions":[] } ]

y lista de filtros

 categories = { "position":["lawyer","director"], "group_positions":["group1","group12"], "department_positions":["generalDep", "subDep"] }

Es necesario filtrar a los usuarios teniendo en cuenta que se pueden seleccionar varios filtros a la vez. Por ejemplo, quiero encontrar un usuario con cargo = "director" y AND group_positions = "group1" AND department_positions = "subDep"

mi código no permite el filtrado por múltiples condiciones. ¿Cómo puedo arreglarlo?

 this.filter = this.filterData.filter(item => { for (let key in this.categories) { if (item[key].find(el => this.categories[key].includes( el.group?.name || el.department?.name ) )) { return true } } return false })}
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puedes intentar algo como esto:

 let filtered = example.filter(item => { let valid = false if (item.includes('something')) { valid = true } if (!valid) { // check second condition } return valid })

Utilice un marcador de posición temporal para que no tenga que devolver inmediatamente verdadero/falso.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Este es un buen lugar para emplear una clase es6 para dar comportamiento al objeto que se filtra. Aumente cada objeto para determinar si coincide con el objeto de "categoría".

(a partir de los datos de ejemplo, esto supone que el OP está buscando una coincidencia de "producto de sumas": todas las claves de categoría coinciden con al menos uno de los valores de categoría)

 class FilterMe { constructor(item) { Object.assign(this, item); } namesForKey(key) { switch (key) { case 'position': return [this.position]; // always answer an array case 'group_positions': return this.group_positions.map(gp => gp.group.name); case 'department_positions': return this.department_positions.map(dp => dp.department.name); default: return []; } } // return true if a single filter key-value pair is matched matchesFilterKeyValue(filterKey, filterOptions) { const myNames = this.namesForKey(filterKey); const matches = filterOptions.filter(e => myNames.includes(e)); return matches.length > 0; } // return true if all filter key-values pairs are matched matchesFilter(filter) { return Object.entries(filter).every(keyValue => { return this.matchesFilterKeyValue(...keyValue); }) } } const filterData = [{ "position": "lawyer", "department_positions": [], "group_positions": [{ "group": { "id": 2, "code": "234", "name": "group1" }, "lead": false }, { "group": { "id": 1, "code": "123", "name": "group12" }, "lead": true }] }, { "position": "director", "department_positions": [{ "department": { "id": 3, "code": "333", "name": "subDep" }, "lead": false }], "group_positions": [{ "group": { "id": 2, "code": "234", "name": "group1" }, "lead": false }, { "group": { "id": 1, "code": "123", "name": "group12" }, "lead": true }] }, { "position": "director", "department_positions": [], "group_positions": [] } ] const categories = { "position": ["lawyer", "director"], "group_positions": ["group1", "group12"], "department_positions": ["generalDep", "subDep"] } // convert the filterData to the objects and test them... let objects = filterData.map(d => new FilterMe(d)); let matches = objects.filter(o => o.matchesFilter(categories)) console.log(matches)

about 4 years ago · Juan Pablo Isaza 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