2
respuestas

Orden de valores en el mapa

Hola, buenas tardes.

En el ejemplo del mas con las ciudades y precios de cada una, deberían estar siempre ordenados de mayor a menor?

const datos = [
    {
        'ciudad':'Bogotá',
        'precio': 500
    },
    {
        'ciudad':'Lima',
        'precio': 400
    },
    {
        'ciudad':'Santiago',
        'precio': 380
    },
    {
        'ciudad':'Montevideo',
        'precio': 200
    },
];

const presupuestoDisponible = 400;
//While se repite 0 o más veces
//Do while se repite 1 o más veces
/*while(i < datos.length && datos[i].precio > presupuestoDisponible) {
    i++;
}*/
//for va desde un valor inicial para un valor final

let ciudadSeleccionada = "";
for (let i = 0; i < datos.length && ciudadSeleccionada == ''; i++) {
    if (datos[i].precio <= presupuestoDisponible){
        ciudadSeleccionada = datos[i].ciudad;
    }
}

if (ciudadSeleccionada == '') 
    console.log("No tenemos pasajes disponibles");
else
    console.log("Puedes comprar pasaje para: "+ ciudadSeleccionada);

Pregunto porque si mi presupuesto disponible es 400 y en el mapa 'ciudad':'Santiago', 'precio': 380 está antes que 'ciudad':'Lima', 'precio': 400, la opción que me daría es Santiago y no Lima.

2 respuestas

¡Hola Janis!

En el ejemplo que compartiste, el código recorre la lista de ciudades y precios en el orden en que están definidos en el arreglo datos. Esto significa que si tu presupuesto disponible es 400 y la primera ciudad que cumple con ese presupuesto es Santiago, entonces esa será la ciudad seleccionada, aunque haya otra ciudad con un precio más cercano a tu presupuesto.

Si deseas que las ciudades estén siempre ordenadas de mayor a menor precio, puedes utilizar el método sort() para ordenar el arreglo datos antes de recorrerlo. Aquí te muestro cómo hacerlo:

const datos = [
    {
        'ciudad':'Bogotá',
        'precio': 500
    },
    {
        'ciudad':'Lima',
        'precio': 400
    },
    {
        'ciudad':'Santiago',
        'precio': 380
    },
    {
        'ciudad':'Montevideo',
        'precio': 200
    },
];

datos.sort((a, b) => b.precio - a.precio); // Ordenar de mayor a menor precio

let ciudadSeleccionada = "";
for (let i = 0; i < datos.length && ciudadSeleccionada == ''; i++) {
    if (datos[i].precio <= presupuestoDisponible){
        ciudadSeleccionada = datos[i].ciudad;
    }
}

if (ciudadSeleccionada == '') 
    console.log("No tenemos pasajes disponibles");
else
    console.log("Puedes comprar pasaje para: "+ ciudadSeleccionada);

Con este código, la ciudad seleccionada será Lima en lugar de Santiago, ya que el arreglo datos estará ordenado de mayor a menor precio.

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios! :)

Muchas gracias!