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

137
Vistas
Filtra múltiples propiedades y valores en js/react

Quiero poder filtrar por estado y prioridad, pero también poder tener múltiples tipos de prioridad o estado, por ejemplo:

 [ { "id": 1, "status": "IN_PROGRESS", "priority": "NONE", "inspectorId": 2, "reportAt": "2021-08-09T12:06:03+00:00", "scheduledFor": "2021-08-12T12:06:03+00:00", }, { "id": 2, "status": "WAITING", "priority": "HIGH", "inspectorId": 2, "reportAt": "2021-08-09T12:06:03+00:00", "scheduledFor": "2021-08-12T12:06:03+00:00", }, { "id": 3, "status": "COMPLETED", "priority": "NONE", "inspectorId": 2, "reportAt": "2021-08-09T12:06:03+00:00", "scheduledFor": "2021-08-12T12:06:03+00:00", }, ]

Actualmente estoy usando .filter para filtrar con el valor que elijo, pero cada vez que elijo más de un valor para la misma propiedad ("ESPERANDO" y "EN PROGRESO" para el estado) obtengo una matriz vacía como retorno.

Aquí está mi código:

 allRequests.filter((item) => { if (filters !== {}) { for (const key in filters) { if (item[key] === undefined || item[key] != filters[key]) { return null; } } } return item; })
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Javascript array.filter espera una función de predicado y devuelve un conjunto filtrado de elementos de matriz en función de esa función de predicado.

En lugar de devolver un elemento, debe devolver un valor booleano de true o false . Esta podría ser la razón por la que se enfrenta a este problema.

Para filtrar por múltiples estados y prioridades, cree un objeto de filtros como el siguiente:

 const filters = { "status": ["COMPLETED", "IN_PROGRESS"], "priority": ["NONE"] };

luego actualice su código a:

 allRequests.filter((item) => { if (Object.keys(filters).length > 0) { for (let key in filters) { if (item[key] === undefined || !filters[key].includes(item[key])) { return false; } } } return true; })

ver :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

https://zetcode.com/javascript/array-filter/

Puede encontrar un ejemplo de trabajo a continuación:

 const allRequests = [ { "id": 1, "status": "IN_PROGRESS", "priority": "NONE", "inspectorId": 2, "reportAt": "2021-08-09T12:06:03+00:00", "scheduledFor": "2021-08-12T12:06:03+00:00", }, { "id": 2, "status": "WAITING", "priority": "HIGH", "inspectorId": 2, "reportAt": "2021-08-09T12:06:03+00:00", "scheduledFor": "2021-08-12T12:06:03+00:00", }, { "id": 3, "status": "COMPLETED", "priority": "NONE", "inspectorId": 2, "reportAt": "2021-08-09T12:06:03+00:00", "scheduledFor": "2021-08-12T12:06:03+00:00", }, ]; const filters = { "status": ["COMPLETED", "IN_PROGRESS"], "priority": ["NONE"] }; const result = allRequests.filter((item) => { if (Object.keys(filters).length > 0) { for (let key in filters) { if (item[key] === undefined || !filters[key].includes(item[key])) { return false; } } } return true; }); console.log(result);

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