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

264
Vistas
La comparación de números de JavaScript da resultados incorrectos

Estoy intentando crear una búsqueda de 3 campos, ocultando y mostrando tarjetas dependiendo de si cumplen con los criterios. query1 y query2 funcionan bien, pero por alguna razón, query3 no funciona según lo previsto. Utilicé un registro de la consola para averiguar qué está sucediendo y el resultado es desconcertante.

 const marketSearchFunction = function() { const query1 = $('#market-search').val().toLowerCase(); const query2 = parseFloat($('#market-min').val()); const query3 = parseFloat($('#market-max').val()); let boolean1 = false let boolean2 = isNaN(query2) ? true : false let boolean3 = isNaN(query3) ? true : false $('.market-frame').each(function(){ const price = parseFloat($(this).find('.price').data('value')) boolean1 = $(this).text().toLowerCase().indexOf(query1) !== -1 boolean2 = (boolean2 ? boolean2 : (price >= query2)) boolean3 = (boolean3 ? boolean3 : (price <= query3)) console.log(price, query3, boolean3, (price <= query3)) showCard($(this), (boolean1 === boolean2 === boolean3)) }); }

Aquí está la salida del registro de la consola

  • NaN 1500 falso falso
  • (2) 1500 1500 verdadero verdadero
  • 2000 1500 verdadero falso
  • 1800 1500 verdadero falso

¿Por qué el sistema establece boolean3 en verdadero, cuando el valor de la comparación es falso?

1800 NO es inferior a 1500, pero lo establece en VERDADERO. Reinicié el servidor, moví el código. No estoy seguro de lo que estoy haciendo mal.

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

0

No es una respuesta directa a su pregunta, pero espero que sea una solución para su problema.

Independientemente de los errores lógicos en su código actual, creo que puede simplificar su lógica y, por lo tanto, hacerla menos propensa a errores y más fácil de razonar. Creo que el problema central es que está compartiendo las variables boolean* en todas las iteraciones.

También use nombres de variables significativos:

 const marketSearchFunction = function() { const query = $('#market-search').val().toLowerCase(); let minPrice = parseFloat($('#market-min').val()); let maxPrice = parseFloat($('#market-max').val()); // Using -Infinity and Infinity lets us keep the price comparison // logic simple if (isNaN(minPrice)) minPrice = -Infinity; if (isNaN(maxPrice)) maxPrice = Infinity; $('.market-frame').each(function(){ const price = parseFloat($(this).find('.price').data('value')); const shouldShow = $(this).text().toLowerCase().indexOf(query1) !== -1 && price >= minPrice && price <= maxPrice; showCard($(this), shouldShow); }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Considera lo siguiente.

 const marketSearchFunction = function() { var query = [ $('#market-search').val().toLowerCase(), parseFloat($('#market-min').val()), parseFloat($('#market-max').val()) ]; var bool = [ false, true, true ]; console.log(query, bool); $('.market-frame').each(function(i, el) { var price = parseFloat($(el).find('.price').data('value')); bool[0] = $(el).text().toLowerCase().indexOf(query[0]) !== -1; bool[1] = bool[1] && price >= query[1]; bool[2] = bool[2] && price <= query[2]; console.log(price, bool); showCard($(el), bool[0] && bool[1] && bool[2]); }); }

Parece que está intentando realizar algún tipo de validación.

Recuerda la siguiente lógica:

A B A y B
verdadero verdadero verdadero
verdadero falso falso
falso verdadero falso
falso falso falso

A medida que itera sobre los elementos, puede establecer el valor usando esta lógica. Creo que es más rápido que el Operador Ternario.

Puede que me confunda un poco tu proceso, pero creo que esto te ayudará.

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