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

253
Vistas
¿Por qué X === (A || B || C) no coincide con nada?

Tengo una matriz que se ve así:

 const subscriptions = [ { "price": "20", "product": "apple", "quantity": 1, }, { "price": "10", "product": "orange", "quantity": 1, }, { "price": "10", "product": "orange", "quantity": 1, }, { "price": "10", "product": "orange", "quantity": 1, }, ]

Y quiero extraer todos los elementos de la matriz con un "producto" de apple , banana o pear .

Así que estoy usando filter() así:

 const currentPlans = subscriptions.filter( (subscription) => subscription.product === ('apple' || 'banana' || 'pear') );

Dado que la matriz solo tiene una instancia de apple , debería ser lo que contiene currentPlans .

Pero currentPlans está devolviendo una matriz vacía.

¿Qué estoy haciendo mal?

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

0

La siguiente línea no va a funcionar como esperas. El lado derecho evalúa primero un valor ( apple ) y luego verifica la igualdad. Nunca busca banana o pear .

 subscription.product === ("apple" || "banana" || "pear")

Debe usar otra matriz para mantener las coincidencias. Prueba como a continuación.

Usando indexOf

 const subscriptions = [ { price: "20", product: "apple", quantity: 1, }, { price: "10", product: "orange", quantity: 1, }, { price: "10", product: "orange", quantity: 1, }, { price: "10", product: "orange", quantity: 1, }, ]; const matches = ["apple", "banana", "pear"]; const currentPlans = subscriptions.filter( (subscription) => matches.indexOf(subscription.product) >= 0 ); console.log(currentPlans);

El uso incluye

 const subscriptions = [ { price: "20", product: "apple", quantity: 1, }, { price: "10", product: "orange", quantity: 1, }, { price: "10", product: "orange", quantity: 1, }, { price: "10", product: "orange", quantity: 1, }, ]; const matches = ["apple", "banana", "pear"]; const currentPlans = subscriptions.filter( (subscription) => matches.includes(subscription.product) ); console.log(currentPlans);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando usa verificaciones condicionales con respecto a la verificación de igualdad, según el nivel de precedencia, la expresión que está presente en el lado derecho de la verificación de igualdad se evalúa primero, por lo que cuando hace 'apple'||'banana'||'pear' , esta afirmación por sí sola se evaluó y luego se comparó con la expresión del lado izquierdo.
Por lo tanto 'apple'||'banana'||'pear' se evaluaría como veraz con el valor apple y cuando verifique este valor con la subscription.product la matriz de filtro devolverá efectivamente un objeto donde el valor de la propiedad product es apple .

 const subscriptions = [ { "price": "20", "product": "apple", "quantity": 1, }, { "price": "10", "product": "orange", "quantity": 1, }, { "price": "10", "product": "orange", "quantity": 1, }, { "price": "10", "product": "orange", "quantity": 1, }, ] const currentPlans = subscriptions.filter( (subscription) => subscription.product === ('apple' || 'banana' || 'pear') ); console.log(currentPlans)

Aunque esto funcionaría al filtrar objetos cuyo valor de producto es apple , la lógica es técnicamente incorrecta cuando desea filtrar valores basados en comprobaciones condicionales. Como se mencionó anteriormente, el OR condicional siempre devolvería el primer valor, es decir, apple , y compararía este valor con cada valor iterable. Para que esto funcione realmente con comprobaciones condicionales, tendría que comprobar individualmente el valor con todos los demás valores, así:

 const currentPlans = subscriptions.filter( (subscription) => subscription.product === 'apple' || subscription.product === 'banana' || subscription.product === 'pear' );

O bien, una forma más fácil de lograr lo mismo sería aplastar todos los valores en una matriz y llamar al método includes y pasar el valor iterable actual como argumento.

 const currentPlans = subscriptions.filter( (subscription) => ['apple' || 'banana' || 'pear'].includes(subscription.product) );
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