Me quedó la duda de cuál es el rol exacto de esta declaración? : while (i < datos.length && ciudadSeleccionada == '')
Creo que la traducción vendría a ser "mientras que i sea menor que la cantidad de datos y la ciudad Seleccionada esté vacío"? En ese caso, como no está vacío, por eso salta directamente al else y arroja el mensaje de que se puede comprar el pasaje? Adjunto el resto del código a continuación.
const presupuestoDisponible = 400;
let i = 0;
let ciudadSeleccionada = '';
do {
if (datos[i].precio <= presupuestoDisponible ) {
ciudadSeleccionada = datos[i].ciudad;
}
i++;
} while (i < datos.length && ciudadSeleccionada == '')
if (ciudadSeleccionada=="") {
console.log("No tenemos pasajes disponibles");
} else {
console.log("Puedes comprar pasaje para: "+ciudadSeleccionada);
}