Tengo un formulario donde un usuario ingresa su dirección. Esto luego compara su dirección con varios destinos en el Reino Unido para ver qué ciudad es la más cercana.
Quiero que cada destino tenga precios diferentes, por ejemplo, Londres, Reino Unido = 50, Birmingham, Reino Unido = 200, etc.
He escrito una instrucción if bastante rudimentaria que verifica la ciudad que se devuelve y calcula el precio. Sin embargo, me pregunto si hay una solución más ordenada para esto, ya que se siente un poco obtuso:
if(closestCities[0].cityName == "Coventry, UK") { travelExpenses = 10; } else if (closestCities[0].cityName == "London, UK"){ travelExpenses = 50; } else if (closestCities[0].cityName == "Margate, UK"){ travelExpenses = 100; } else if (closestCities[0].cityName == "Bristol, UK"){ travelExpenses = 20; } else if (closestCities[0].cityName == "Tamworth, UK"){ travelExpenses = 15; } else if (closestCities[0].cityName == "Birmingham, UK"){ travelExpenses = 200; } else { travelExpenses = 30; }¿Por qué no creas un objeto?
let map = { "Margate, UK": 100, "Bristol, UK": 20 // etc. }Parece que también quieres un valor predeterminado. Creo que en su caso podría utilizar el operador coalescente nulo :
El operador coalescente nulo (??) es un operador lógico que devuelve su operando del lado derecho cuando su operando del lado izquierdo es nulo o indefinido, y de lo contrario devuelve su operando del lado izquierdo
travelExpenses = map[closestCities[0].cityName] ?? 30;También podrías definir un diccionario para tus gastos
let expenses = { "Coventry, UK": 10, "London, UK": 20, ... } let travelExpenses = expenses[closestCities[0].cityName] || 30; Si tienes alguna ciudad, con gastos 0 , tienes que hacerlo de la siguiente manera
let travelExpenses = expenses[closestCities[0].cityName]; if (travelExpenses === undefined) travelExpenses = 30;Puede intentar destructuring el objeto junto con la declaración de switch para que sea altamente legible.
const { cityName } = closestCities[0] switch (cityName) { case "Coventry, UK": travelExpenses = 10; break; case "London, UK": travelExpenses = 20 break; ... }