Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

250
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda