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

123
Vistas
JS: Bucle con múltiples condiciones

Tengo una serie de objetos (automóviles), de los cuales quiero mostrar solo los autos que "compiten".

 const cars = [ { name: "red", competes: true, category: 1 }, { name: "blue", competes: false, category: 1 }, { name: "green", competes: true, category: 2 }, { name: "yellow", competes: true, category: 3 } ]

Pero de los autos que compiten, solo quiero mostrar los autos que están en la categoría uno, lo cual está bien con un bucle for.

Los objetos ahora son estáticos, pero como quiero cambiarlos en un segundo momento, necesito un código que verifique si los autos compiten y luego verifique si hay autos en la "categoría" uno.

  • Si hay autos en la "categoría 1", enumérelos
  • Si no hay autos en la "categoría" 1, liste los de la "categoría" 2 (pero no los de la 3)
  • Y así

Mi intento fue con un bucle dentro de un bucle, algo que no funciona ya que muestra todo varias veces

 for (let i = 0; i < cars.length; i++) { if (cars[i].competes === false) continue; for (let f = 0; f < cars.length; f++) { if (cars[f].category > 1) break; console.log(`Cat1: ${cars[f].name}`); } }

¿Cómo se puede resolver esto si los atributos de "categoría" dentro de "automóviles" son, por ejemplo, 2 o más?

 const cars = [ { name: "red", competes: true, category: 2 }, { name: "blue", competes: false, category: 2 }, { name: "green", competes: true, category: 3 }, { name: "yellow", competes: true, category: 4 } ]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Aquí hay una solución simple con ordenar y filtrar

 const cars = [ { name: "red", competes: true, category: 1 }, { name: "blue", competes: false, category: 1 }, { name: "green", competes: true, category: 2 }, { name: "yellow", competes: true, category: 3 } ] let result = cars.sort((a,b) => a.category - b.category) .filter(car => car.competes && (cars.length && car.category == cars[0].category)) console.log(result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Podemos comenzar obteniendo la 'categoría competidora' obteniendo la categoría competidora más baja presente, usando Math.min() y Array.filter()

Luego, podemos obtener todos los autos de la competencia usando Array.filter() para devolver solo autos con un valor de competes que sea verdadero y que también pertenezca a la categoría de la competencia.

 const cars = [ { name: "red", competes: true, category: 1 }, { name: "blue", competes: false, category: 1 }, { name: "green", competes: true, category: 2 }, { name: "yellow", competes: true, category: 3 } ] // Only this category is competing.. const competingCategory = Math.min(...cars.filter(car => car.competes).map(({category}) => category)); const competingCars = cars.filter(car => car.competes && car.category === competingCategory); console.log('Competing cars:', competingCars)
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Este ejemplo tiene solo las categorías 2 y 3 presentes:

 const cars = [ { name: "blue", competes: true, category: 2 }, { name: "green", competes: true, category: 2 }, { name: "yellow", competes: true, category: 3 } ] // Only this category is competing.. const competingCategory = Math.min(...cars.filter(car => car.competes).map(({category}) => category)); const competingCars = cars.filter(car => car.competes && car.category === competingCategory); console.log('Competing cars (example II):', competingCars)
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

En primer lugar, ordena la matriz según la categoría y luego filtra una matriz con los autos que van a competir

 const cars = [ { name: "red", competes: true, category: 1 }, { name: "blue", competes: false, category: 1 }, { name: "green", competes: true, category: 2 }, { name: "yellow", competes: true, category: 3 } ] const sorted = cars.sort((a, b) => a.category - b.category); const compete = sorted.filter(x => x.competes && x.category == sorted[0].category); console.log(compete[0]);

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