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

139
Vistas
La matriz de filtros nativos de React no funciona en una cadena

Tengo problemas para intentar filtrar una serie de objetos de mensaje. No quiero incluir los objetos con valor "_id" "receptor" o "usuarios bloqueados".

Matriz de objetos de mensaje:

 [ {"_id":"receiver"}, {"_id":"blockedUsers"}, {"_id": MjIzx3XA1mpcuzgDVZj","createdAt":1631349363111,"text":"Ok","user":{"name":"Nikki","_id":"M6fBsPludfYVjJXKYvwgxHRacYw1"}}, {"_id":" MjG3hFAgcNweJWh9SF7","createdAt":1631300277391,"text":"Again","user":{"name":"Chris","_id":"tFhmw5oQoPhk8nF2sx5rE5BFqw93"} } ]

Lo siguiente no parece funcionar

 this.state.messages.filter(msg => !msg._id.includes("receiver") || !msg._id.includes("blockedUsers")).

Se devuelve la matriz original.

Pero si uso esto

 this.state.messages.filter(msg => msg._id.includes("receiver") || msg._id.includes("blockedUsers"))

vuelve:

 [{"_id":"receiver"},{"_id":"blockedUsers"}]

¿Puedes ayudarme?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La condición del filtro es incorrecta, siempre devolverá verdadero en su caso.
La devolución de llamada de Array.filter() debe devolver true para los elementos que desea conservar.

Tienes que usar AND && en lugar de OR || .

 this.state.messages.filter(msg => !msg._id.includes("receiver") && !msg._id.includes("blockedUsers") )

¿Por qué inicialmente devolvió verdadero? Porque cuando la identificación es "receptor", no incluye "usuarios bloqueados" y viceversa. Desea conservar el elemento si no incluye "receptor" Y tampoco incluye "usuarios bloqueados".

Aquí hay una tabla de verdad para que quede más claro, debería ser true para los elementos que desea conservar.

!incluye("receptor") !incluye("Usuariosbloqueados") O Y
falso falso falso ✅ falso ✅(omitir elemento, incluye ambas cadenas)
falso verdadero cierto ❌ falso ✅(omitir elemento, incluye "usuarios bloqueados")
verdadero falso cierto ❌ falso ✅(omitir elemento, incluye "receptor")
verdadero verdadero cierto ❌ verdadero ✅(este es el único caso en el que desea mantener el elemento, cuando no incluye ninguna cadena)
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede combinar Array.prototype.filter() con Array.prototype.includes() :

 const arr = [{ _id: 'receiver' },{ _id: 'blockedUsers' },{ _id: 'MjIzx3XA1mpcuzgDVZj', createdAt: 1631349363111, text: 'Ok', user: { name: 'Nikki' } },{ _id: 'M6fBsPludfYVjJXKYvwgxHRacYw1' },{ _id: ' MjG3hFAgcNweJWh9SF7', createdAt: 1631300277391, text: 'Again', user: { name: 'Chris', _id: 'tFhmw5oQoPhk8nF2sx5rE5BFqw93' }}] const result = arr.filter(({ _id }) => !['receiver', 'blockedUsers'].includes(_id)) 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