Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

247
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!